現在この3つのテーブルを用いてPHP内部にメソッドを作っていますがエラーになります
メソッドの内容はhistoryテーブルにsushi、dessertテーブルの商品を紐付け、結果を返すというメソッドです。![![イメージ説明]
エラー箇所は特定出来ており、SQL分です。MySQLで実行したところ空になりました。
実行結果は以下の様になるかと思いましたが、
実際は
となり、ID,NAME,PRICEの横にID,NAME,PRICEと一つにまとまっていません。
現在はsushi,dessertで別々に取得しているのですが、画像の様にまとめて取得するにはどの様な文が適切でしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/13 20:36
回答1件
0
ベストアンサー
SQL
1SELECT * FROM history JOIN sushi on (...) JOIN desert on (...) WHERE ~
SELECT で「すべてのカラム」(*)を取ると指定していますから、
history のすべてのカラムと、
sushi のすべてのカラムと、
desert のすべてのカラム
が出ているのです。
さらに言えばこの SQL ですと結合が INNER JOIN になりますから、レコードとして取れるのは
「productid が sushi.ID であり、かつ desert.id でもある」ようなデータでないと出てこなくなります。
- sushi, desert のそれぞれに対する結合を行う SELECT 文を作り、UNION ALL で結合する
- history を結合元として sushi, desert を OUTER JOIN で結合し、どちらか null でない方の id, name, img, intro を取り出すようにカラム指定を工夫する
のどちらかでないと欲しいものは取れないでしょう。
SQL
1SELECT history.productid AS productid, history.tableNumber AS tableNumber, history.quantity AS quantity, 2sushi.name AS name, sushi.price AS price, sushi.img AS img, sushi.intro AS intro 3FROM history INNER JOIN sushi ON (history.productid = sushi.id) 4WHERE ~ 5UNION ALL 6SELECT history.productid AS productid, history.tableNumber AS tableNumber, history.quantity AS quantity, 7desert.name AS name, desert.price AS price, desert.img AS img, desert.intro AS intro 8FROM history INNER JOIN desert ON (history.productid = desert.id) 9WHERE ~
SQL
1SELECT history.productid AS productid, history.tablenumber AS tablenumber, history.quantity AS quantity, 2COALESCE(sushi.id, desert.id) AS id, 3COALESCE(sushi.name, desert.name) AS name, 4COALESCE(sushi.price, desert.price) AS price, 5COALESCE(sushi.img, desert.img) AS img, 6COALESCE(sushi.intro, desert.intro) AS intro 7FROM history 8 LEFT OUTER JOIN sushi ON (sushi.id = history.productid) 9 LEFT OUTER JOIN desert ON (desert.id = history.productid) 10WHERE ~
投稿2018/12/14 00:10
総合スコア13703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/14 18:50 編集
2018/12/14 19:03 編集
2018/12/21 06:44
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。