問題:
我在多個表中有數據,需要根據「;」加入(分號)列中的分隔值。我無法使用 PHP 或任何其他語言來操縱結果。有沒有辦法僅使用 MySQL 來實現此目的?
答案:
是的,可以透過 ';' 加入使用純 MySQL 在欄位中分隔值。以下是解決方案的詳細說明:
將分隔字串轉換為行
關鍵是轉換 ';'將分隔字串分成一系列行。這可以透過以下步驟來實現:
規範化User_resource 表的查詢
<code class="sql">SELECT user_resource.user, user_resource.resources, COUNT_IN_SET(user_resource.resources, ';') AS resources_count, isequence.id AS resources_index, VALUE_IN_SET(user_resource.resources, ';', isequence.id) AS resources_value FROM user_resource JOIN integerseries AS isequence ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') ORDER BY user_resource.user, isequence.id</code>
將規範化表與標準化資源表
範例輸入與輸出<code class="sql">SELECT user_resource.user, resource.data FROM user_resource JOIN integerseries AS isequence ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') JOIN resource ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id) ORDER BY user_resource.user, resource.data</code>
user_resource 表:
資料表:
user | resources |
---|---|
user1 | 1;2;4 |
user2 | 2 |
user3 | 3;4 |
id | data |
---|---|
1 | data1 |
2 | data2 |
3 | data3 |
4 | data4 |
5 | data5 |
標準化user_resource 表:
user | resources | resources_count | resources_index | resources_value |
---|---|---|---|---|
user1 | 1;2;4 | 3 | 1 | 1 |
user1 | 1;2;4 | 3 | 2 | 2 |
user1 | 1;2;4 | 3 | 3 | 4 |
user2 | 2 | 1 | 1 | 2 |
user3 | 3;4 | 2 | 1 | 3 |
user3 | 3;4 | 2 | 2 | 4 |
輸出(連接結果):
user | data |
---|---|
user1 | data1 |
user1 | data2 |
user1 | data4 |
user2 | data2 |
以上是MySQL 中可以根據分號分隔的值連接表嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!