[解決済み] SELECT * FROM multiple tables. MySQL
質問
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id
は 5 行 (5 個の配列) になります。
photo
は行内で唯一のユニークフィールドです。
name, price
が繰り返される(
ここで
fanta-
name, price
を3回繰り返す。
どうすれば、この重複を取り除くことができますか?
編集する
私が欲しいのは
name, price
とすべての
photo
を各ドリンクに設定してください。
id name price
1. fanta 5
2. dew 4
id photo drinks_id
1. ./images/fanta-1.jpg 1
2. ./images/fanta-2.jpg 1
3. ./images/fanta-3.jpg 1
4. ./images/dew-1.jpg 2
5. ./images/dew-2.jpg 2
解決方法は?
ここでやっていることは
JOIN
(複数のテーブルから選択するので、暗黙のうちにやっていることですが)。つまり、WHERE句に何も条件を付けなかった場合、次のようになります。
すべての組み合わせ
のテーブルがあります。条件を指定することで、ドリンクのIDが一致する行にのみ結合を制限することができます。
しかし、この特定のdrinks_idを持つ写真がX枚あれば、すべての飲み物についてX個の複数行が結果に含まれることに変わりはありません。あなたのステートメントでは どの の写真になります。
1 つの飲み物に対して 1 行しか必要ない場合、特定の drinks_id を持つ行が複数ある場合にどうするかを SQL に指示する必要があります。そのためには、グループ化および アグリゲート関数 . SQL にグループ化したい項目(例えば、drink_id がすべて等しい)を指定し、SELECT で、グループ化された各行について、どの個別の項目を取得するかを指定する必要があります。数値の場合は、平均値、最小値、最大値などの値を指定します。
あなたの場合、1行だけなら、飲み物の写真を問い合わせる意味はないと思うのですが。おそらく 写真の配列 というのがありますが、これはSQLではできません。もしあなたが 任意の の写真を取得し、どの写真を取得するかは気にしない場合は、drinks_id でグループ化してください (飲み物ごとに一行だけ取得するため)。
SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg
また、MySQLでは GROUP_CONCAT ファイル名を連結して1つの文字列にしたい場合。
SELECT name, price, GROUP_CONCAT(photo, ',')
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
name price photo
fanta 5 ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew 4 ./images/dew-1.jpg,./images/dew-2.jpg
しかし、これは、もしあなたが
,
というのも、たいていの場合、クライアント側でこれを再び分割したいからです。また、これは標準的なSQLの集計関数ではありません。
関連
-
[解決済み】MySQLエラー1264:カラムの範囲外の値
-
[解決済み] SQLキー、MUL vs PRI vs UNI
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] MySQL で特定のカラム名を持つすべてのテーブルを見つけるにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラーコード1292 - 不正なDOUBLE値の切り捨て - Mysql
-
[解決済み】#1273 - 不明な照合順序:'utf8mb4_unicode_520_ci'
-
[解決済み】mysqlが内部または外部のコマンド、操作可能なプログラムまたはバッチとして認識されない。
-
[解決済み】mysqld_safe UNIX ソケットファイル用のディレクトリ '/var/run/mysqld' が存在しません。
-
[解決済み] MySQLを使用したパーセンタイル値の計算
-
[解決済み] MySQLが重複したレコードを削除し、最新のレコードを保持する
-
[解決済み] MySQLから最後のN行を選択する
-
[解決済み] dpkg: error processing package mysql-server (dependency problems)?
-
[解決済み] MySQLの グループ関数の無効な使用
-
[解決済み】MySQLとGROUP_CONCAT()の最大長について