Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połącz tabele wartościami przecinków

Zalecam, aby twoje sprzężenia były jawne.
Ułatwia to debugowanie zapytania i zmianę wewnętrznych za pomocą lewych sprzężeń.
Absolutnie nigdy nie ma dobrego powodu, aby używać składni niejawnego sprzężenia 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;

Odnośnie projektu bazy danych.
Polecam normalizację bazy danych, co oznacza przeniesienie pól oddzielonych przecinkami do innej tabeli.

Więc robisz odbiorniki stołowe

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

Następnie usuwasz odbiornik pola z tabeli newsletter_items

Twoje zapytanie zmieni się na:

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;

Ta zmiana powinna również znacznie przyspieszyć Twoje zapytanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić obraz z bazy danych za pomocą php

  2. Jak uzyskać identyfikator wielu wstawionych wierszy w MySQL?

  3. mysqldump z wieloma tabelami z klauzulą ​​where lub bez

  4. Asynchroniczne wywołania bazy danych węzła JS

  5. Sterownik QMYSQL nie jest załadowany w systemie Windows