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

Gabung tabel dengan nilai koma

Saya menyarankan Anda untuk membuat gabungan Anda eksplisit.
Ini membuatnya lebih mudah untuk men-debug kueri Anda dan mengubah bagian dalam dengan gabungan kiri.
Sama sekali tidak pernah ada alasan yang baik untuk menggunakan sintaks gabungan implisit SQL '89.

SELECT ni.*
       , nf.*
       , group_concat(nm.mailgroup_name) as mailgroups
FROM newsletter_items ni
INNER JOIN newsletter_fields nf 
  ON (nf.field_letter_uid = ni.letter_id)
INNER JOIN newsletter_mailgroups nm  
  ON (find_in_set(nm.mailgroup_id, ni.receivers))
WHERE  
  nf.field_name = 'letter_headline' 
  ni.template = '". $template ."' 
GROUP BY ni.letter_id;

Mengenai desain database Anda.
Saya sarankan Anda menormalkan database Anda, artinya Anda memindahkan bidang yang dipisahkan koma ke dalam tabel yang berbeda.

Jadi Anda membuat penerima meja

Receivers
----------
id integer auto_increment primary key
letter_id integer not null foreign key references newsletter_items(letter_id)
value integer not null

Anda kemudian menghapus penerima bidang dari tabel newsletter_items

Kueri Anda kemudian berubah menjadi:

SELECT ni.*
       , group_concat(r.value) as receivers
       , nf.*
       , group_concat(nm.mailgroup_name) as mailgroups

FROM newsletter_items ni
INNER JOIN newsletter_fields nf 
  ON (nf.field_letter_uid = ni.letter_id)
INNER JOIN newsletter_mailgroups nm  
  ON (find_in_set(nm.mailgroup_id, ni.receivers))
LEFT JOIN receiver r ON (r.letter_id = ni.letter_id)
WHERE  
  nf.field_name = 'letter_headline' 
  ni.template = '". $template ."' 
GROUP BY ni.letter_id;

Perubahan ini juga akan mempercepat kueri Anda secara signifikan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya menggunakan ON DUPLICATE KEY UPDATE dalam model CodeIgniter saya?

  2. Peringatan:mysqli_stmt::bind_param():Jumlah variabel tidak cocok dengan jumlah parameter dalam pernyataan yang disiapkan

  3. Kembalikan catatan ke-n dari kueri MySQL

  4. Mendapatkan Kesalahan MYSQL:Kode Kesalahan:2006 - Server MySQL telah hilang

  5. hasil ganda dalam array saya ( mysql_fetch_array )