質問:
「;」に基づいて結合する必要があるデータが複数のテーブルにあります。列内の値は (セミコロン) で区切られます。 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>
正規化されたテーブルを結合するリソース テーブル
user_resource テーブルが正規化されたら、リソース テーブルと結合して目的の結果を得ることができます。
<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 |
resource テーブル:
id | data |
---|---|
1 | data1 |
2 | data2 |
3 | data3 |
4 | data4 |
5 | data5 |
Normalizeduser_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 中国語 Web サイトの他の関連記事を参照してください。