0

別のテーブルの ID を別のテーブルの行の特定のフィールドにリストして、テーブルを接続しようとしています。

これが私がやろうとしていることです。

テーブルアイテム

Id   Name    Price
 1   Drink   5
 2   Food    3

テーブルキャラクター

Id   Name   Cash   Inventory 
 1   Foo    10     1
 2   Bar    10     2
 3   Stu    10     1, 2

キャラクター 'Stu' に関するデータをプルすると、アイテム '1 & 2' に関連付けられたデータがプルされるように、アイテムを参照しようとしています。

私は正規化と外部キーについて読みましたが、私が望む方法でそれらを結びつける方法を見つけることができませんでした. また、INT フィールドはカンマで区切られた複数の整数を受け入れないこともわかりました。

4

2 に答える 2

1

これはFIND_IN_SETを使用してテーブル構造を見て簡単にできるはずですここで解決策です

SELECT 
    * 
FROM `characters` as c
LEFT JOIN items as i on FIND_IN_SET(i.id, c.Inventory)
WHERE c.name= 'Stu'

編集 :

ここに編集されたソリューションは、1 行のソリューションを意味します。

SELECT 
    c.* ,
    group_concat(i.name) as ItemName,
    group_concat(i.price) as ItemPrices         
FROM `characters` as c
LEFT JOIN items as i on FIND_IN_SET(i.id, c.Inventory)
WHERE c.name= 'Stu'
group by c.name

PHP を使用している場合は、セルを php の爆発関数で分解し、セルをループしてすべてのセル値にアクセスできます。

編集 :

SELECT 
    c.* ,
    group_concat(i.id) as ItemIds,
    group_concat(i.name) as ItemName,
    group_concat(i.price) as ItemPrices         
FROM `characters` as c
LEFT JOIN items as i on FIND_IN_SET(i.id, c.Inventory)
WHERE c.name= 'Stu'
group by c.name 
于 2012-12-10T05:57:25.127 に答える
1

1 対多の関係を構築しようとしています。外部キーをテーブル項目、つまり CharacterId に配置する必要があります。次に、JOIN を使用してデータをプルできます。

于 2012-12-10T05:49:47.227 に答える