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

MySQL pilih data terbatas

Seperti yang tersirat oleh komentar Strawberry di atas, ada cara untuk melakukan ini, tetapi sangat jelek. Ini seperti menyelesaikan renovasi dapur mahal Anda menggunakan lakban. Anda seharusnya merasa kesal terhadap orang yang mendesain database dengan cara ini.

SELECT g.id_group, GROUP_CONCAT(n.Names SEPARATOR ' ') AS Names
FROM groups AS g JOIN names AS n
  ON FIND_IN_SET(n.id_names, REPLACE(g.Name, '|', ','))
GROUP BY g.id_group;

Keluaran, diuji pada MySQL 5.6:

+----------+---------------+
| id_group | Names         |
+----------+---------------+
|        1 | Joe Mary Bill |
|        2 | Fred Mary     |
|        3 | Jack Joe      |
+----------+---------------+

Kompleksitas kueri ini, dan fakta bahwa kueri ini akan dipaksa untuk melakukan pemindaian tabel dan tidak dapat dioptimalkan, akan meyakinkan Anda tentang apa yang salah dengan menyimpan daftar id dalam string yang dibatasi .

Solusi yang lebih baik adalah membuat tabel ketiga, di mana Anda menyimpan masing-masing anggota grup pada satu baris dengan sendirinya. Artinya, beberapa baris per grup.

CREATE TABLE group_name (
  id_group INT NOT NULL,
  id_name INT NOT NULL,
  PRIMARY KEY (id_group, id_name)
);

Kemudian Anda dapat membuat kueri dengan cara yang lebih sederhana, dan Anda memiliki kesempatan untuk membuat indeks untuk membuat kueri dengan sangat cepat.

SELECT id_group, GROUP_CONCAT(names SEPARATOR ' ') AS names
FROM groups
JOIN group_name USING (id_group)
JOIN names USING (id_name)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memasukkan karakter utf-8 dengan benar ke tabel MySQL menggunakan python

  2. Masukkan nilai teks berdasarkan nilai opsi pilih yang dimuat secara dinamis dari sql db

  3. Pengecualian PHP PDO + Peringatan di MySQL Telah Hilang?

  4. Cara membuat output dua kolom dari satu kolom

  5. Perbandingan datetime MySQL dengan baris sebelumnya