[解決済み] 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行だけ欲しい場合、特定のdrinks_idを持つ複数の行がある場合にどうしたいかをSQLに指示する必要があります。このためには、グループ化および 集約関数 . SQL にグループ化したい項目(例えば、drink_id がすべて等しいなど)を指定し、SELECT で、グループ化された各行について、どの個別の項目を取得するかを指定する必要があります。数値の場合、これは平均、最小、最大(いくつか例を挙げます)にすることができます。
あなたの場合、一行しか必要ないのであれば、飲み物の写真をクエリする意味が見当たりません。あなたはおそらく 写真の配列 という配列ができると思ったのでしょうが、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 集約関数ではありません。
関連
-
[解決済み] SQLエラー。ORA-01861:リテラルは、フォーマット文字列01861に一致しません。
-
Mysql がエラー 1241 を報告 オペランドは 1 つのカラムを含む必要があります。
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
MySQLデータベースでvarchar型の数値の大きさを比較する方法
-
MySQLとOracleの一括挿入SQLの汎用的な記述例
-
[解決済み】文字列からuniqueidentifierに変換する際に変換に失敗する - 2つのGUIDの場合
-
MySQLにおけるvarchar型とchar型の違い
-
SQLステートメントエラーです。オペランドには 1 つのカラムを含める必要があります [括弧を追加せずに複数のフィールドをクエリする
-
CMakeエラー。ソースディレクトリ "/xxx/mysql-5.6.21" に CMakeLists.txt がないようです。
-
[解決済み] Ubuntu linux上で動作するリモートMySQLサーバーを再起動する方法は?
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み】MySQLとGROUP_CONCAT()の最大長について