Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PILIH * DARI beberapa tabel. MySQL

Apa yang Anda lakukan di sini disebut JOIN (walaupun Anda melakukannya secara implisit karena Anda memilih dari beberapa tabel). Ini berarti, jika Anda tidak memasukkan kondisi apa pun dalam klausa WHERE Anda, Anda memiliki semua kombinasi dari tabel-tabel itu. Hanya dengan syarat Anda, Anda membatasi bergabung Anda ke baris di mana id minuman cocok.

Tapi masih ada X beberapa baris di hasil untuk setiap minuman, jika ada X foto dengan drink_id khusus ini. Pernyataan Anda tidak membatasi yang mana foto yang ingin Anda miliki!

Jika Anda hanya ingin satu baris per minuman, Anda harus memberi tahu SQL apa yang ingin Anda lakukan jika ada beberapa baris dengan id_minuman tertentu. Untuk ini, Anda memerlukan pengelompokan dan fungsi agregat . Anda memberi tahu SQL entri mana yang ingin Anda kelompokkan bersama (misalnya semua drink_ids yang sama) dan di SELECT, Anda harus memberi tahu entri mana yang berbeda untuk setiap baris hasil yang dikelompokkan yang harus diambil. Untuk angka, ini bisa menjadi rata-rata, minimum, maksimum (untuk menyebutkan beberapa).

Dalam kasus Anda, saya tidak dapat melihat arti untuk menanyakan foto-foto minuman jika Anda hanya menginginkan satu baris. Anda mungkin berpikir Anda dapat memiliki berbagai foto di hasil Anda untuk setiap minuman, tetapi SQL tidak dapat melakukan ini. Jika Anda hanya ingin apa saja foto dan Anda tidak peduli mana yang akan Anda dapatkan, cukup kelompokkan berdasarkan drink_id (untuk mendapatkan hanya satu baris per minuman):

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

Di MySQL, kami juga memiliki GROUP_CONCAT , jika Anda ingin nama file digabungkan menjadi satu string:

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

Namun, ini bisa berbahaya jika Anda memiliki , dalam nilai bidang, karena kemungkinan besar Anda ingin membagi ini lagi di sisi klien. Ini juga bukan fungsi agregat SQL standar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL – FOUND_ROWS() Fungsi untuk Jumlah Baris yang Terpengaruh

  2. Bagaimana cara mengaktifkan mysqlnd untuk php?

  3. Cara Menghapus Trailing Whitespace di MySQL

  4. Instal Web Server di Windows XP dengan Apache2, PHP5 dan MySQL4 – Bagian 4

  5. Cara Mengimpor dan Mengekspor File CSV Menggunakan PHP dan MySQL