2016-08-25 8 views
4

IはMySQLは分割した値

id | values 
1 | 1,2 
2 | 1,2,3 
3 | 1,1 
4 | 1,1,2 

以下に似て2列の[マッピング]テーブルを有し、別のテーブル[マップ]マイ期待される出力がこの

sno | values 
1 | Test 
2 | Hello 
3 | Hai 

に類似しているに参加

id | values 
1 | Test,Hello 
2 | Test,Hello,Hai 
3 | Test,Test 
4 | Test,Test,Hello 

可能ですか?それがあれば誰でも私のための質問を作成できます。

+0

どのSQLを試しましたか? – jedifans

+0

私はそれが可能かどうかわからないので、私は何も試していないし、私はポストの最後に言及している理由のために "可能か@jedifans" –

+1

スキームを変更することはできますか?今のところ、このスキームではデータの一貫性が悪いからです。テーブル 'mapping'には' map_id'と 'value_id'という列があります。そして、一つのmap_idで複数の行をデータベースに保存することができます。 –

答えて

6

あなたが値をCONCATするテーブルやGROUP_CONCAT()に参加するMySQLのFIND_IN_SET()を使用することができます。

SELECT s.sno,GROUP_CONCAT(s.values) as `values` 
FROM mapping t 
INNER JOIN map s ON(FIND_IN_SET(s.id,t.values)) 
GROUP BY s.sno 

注:あなたはこれがあることを知っている必要があり非常に悪いDB構造です。これにより、さらに複雑なクエリが生成され、複雑な作業を余儀なくされることになります。 Normalizeあなたのデータを分割し、それぞれIDを別々のレコードに置く必要があります!

+1

あなたの提案をありがとう、私はそれを念頭に置く。しかし私の元のデータでは、あなたが提案した方法を置くことはできません。私が投稿しているものは私のDBスキーマとはまったく異なります。@ sagi –

2
SELECT 
    `ids`.`id`, 
    GROUP_CONCAT(`values`.`texts`) AS texts 
FROM 
    `ids` 
INNER JOIN `values` ON FIND_IN_SET(`values`.`id`, `ids`.`values`) 
GROUP BY 
    `ids`.`id` 

それは次のように動作します。Example