次の構造を持つ3つの異なるテーブルがあります。
食べ物
ID | title
---+----------
1 | sandwich
2 | spaghetti
成分
ID | food_reference | type | location | bought
----+----------------+------+----------+----------
100 | 1 | ham | storeA | 11-1-2013
101 | 1 | jam | storeB | 11-1-2013
102 | 2 | tuna | storeB | 11-6-2013
タグ
ID | food_reference | tag
----+----------------+-----
1000| 1 | Tag
1001| 1 | Tag2
1002| 2 | fish
そして、1 つの選択を使用して、1 つの特定の ID について、これら 3 つのテーブル (タイトル、タイプ、場所、購入、タグ) からすべての情報を取得したいと考えています。私は次のようなことを試しました
SELECT food.*,ingridients.*,tags.* FROM food
JOIN ingridients
ON :id=ingridients.food_reference
JOIN tags
ON :id=tags.food_reference
WHERE id=:id
しかし、このクエリは id=1 に対して ingridients と tags から 1 行のみを返しますが、2 つの一致する行 (ham と jam、Tag と Tag2) があります。私が間違っていることを教えていただけますか?
編集: LolCoder のソリューションを試しましたが、フィドルでは機能しているように見えますが、まだ 1 つの結果しか得られませんでした。しかし、私は試しました:
SELECT F.*, group_concat(I.type), group_concat(I.location),
group_concat(I.bought), group_concat(T.tag)
FROM feeds F
INNER JOIN ingridients I
ON :id = I.food_reference
INNER JOIN tags T
ON :id=T.food_reference
WHERE F.id=:id
これはすべての一致する行からデータを検索しますが、数回、つまり (id=1 の場合) サンドイッチ、ハム、ハム、ハム、ジャム、ジャム、ジャム、タグ、タグ、タグ、タグ 2、タグ 2、タグ 2 を取得します。
EDIT2:魔法が起こり、LolCoderのソリューションが機能するので、ありがとう:-)