簡體   English   中英

MySQL從具有多個鍵值對的表的單個字段中選擇鍵的值

[英]Mysql select value of the key from single field of table having multiple key-value pairs

我有這樣的表:

服務:

+----+-----------+------------+-------------+
| id | name      | service_id | description |
+----+-----------+------------+-------------+
| 1  | CHAT      |      1     |             |
| 2  | SMS       |      1     |             |
+----+-----------+------------+-------------+

service_features:

+----+------------+------------+-------------+
| id | service_id | name       | description |
+----+------------+------------+-------------+
|10  |          1 | Audio      |             |
|20  |          1 | Video      |             |
|30  |          2 | BULKSMS    |             |
+----+------------+------------+-------------+

client_services:

+----+-----------+------------+----------------------------------+---------------------------------------------+
| id | client_id | service_id |service_features_id               |service_values                               |
+----+-----------+------------+----------------------------------+---------------------------------------------+
|100 |      1000 |          1 |features:{10:enable, 20:disable}  |values:{data_transfer:102400, quota:204800}  |
|200 |      1001 |          2 |features:{30:enable}              |values:{total_sms:100000, users:800}         |
|300 |      1001 |          1 |features:{10:disable, 20:enable}  |values:{quota:204800}                        |
+----+-----------+------------+----------------------------------+---------------------------------------------+

現在我只想從mysql select查詢中獲取任何關鍵字的服務值,例如data_transfer或client_id 1000的配額。 答案應該分別是102400或204800

有沒有更好的方法來正規化表或存儲信息。 請提出建議。

絕對有更好的方法。 您的架構需要另外兩個表client_services_featuresclient_services_values ,而不是client_services client_services_features具有以下列:

  • ID
  • client_id
  • services_id
  • service_feature_id
  • isEnabled

並且client_services_values具有以下列:

  • ID
  • client_id
  • services_id
  • 值名稱
  • value_value

每當您發現一個表結構將事物列表保持在一行中時,通常都希望為該列表創建一個單獨的表。 當列表包含ID時,您總是想為該列表創建一個單獨的表。

在列中存儲值列表,json或xml使得查詢特定數據非常困難。 通常最好將數據分成單獨的行。

我還要另外兩個桌子

client_services_values:

+----+-----------+------------+---------------------------------+
| id | client_id | service_id |service_type   | service_value   |
+----+-----------+------------+---------------------------------+
|1   |      1000 |          1 |data_transfer  | 102400          |
|2   |      1000 |          1 |quota          | 204800          |
|3   |      1001 |          2 |total_sms      | 100000          |
|4   |      1001 |          2 |users          | 800             |
|5   |      1001 |          1 |quota          | 204800          |
+----+-----------+------------+---------------------------------+

和client_features

+----+-----------+------------+-----------------+
| id | client_id | feature_id | feature_value   |
+----+-----------+------------+-----------------+
|1   |      1000 |         10 |enable           |
|2   |      1000 |         20 |disable          |
|3   |      1001 |         30 |enable           |
|4   |      1001 |         10 |disable          |
|5   |      1001 |         20 |enable           |
+----+-----------+------------+-----------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM