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

Mysql Pisahkan String dan Pilih dengan hasil

Anda harus memikirkan normalisasi. Namun untuk skema saat ini pertimbangkan yang berikut

mysql> select * from frontend_users ;
+------+-----------+---------+
| uid  | usergroup | name    |
+------+-----------+---------+
|    1 | 1,2,3     | Michael |
|    2 | 2         | Tobias  |
|    3 | 1         | Colin   |
+------+-----------+---------+
3 rows in set (0.00 sec)

mysql> select * from usergroup ;
+------+----------+
| uid  | title    |
+------+----------+
|    1 | member   |
|    2 | reporter |
|    3 | admin    |
+------+----------+
3 rows in set (0.00 sec)

Untuk mendapatkan hasil yang diinginkan, Anda dapat menggunakan kueri berikut yang tidak efisien untuk jangka panjang

select 
u.uid,
u.name, 
group_concat(g.title) as groups 
from frontend_users u 
join usergroup g on find_in_set(g.uid,u.usergroup) > 0 
group by u.uid ;

+------+---------+-----------------------+
| uid  | name    | groups                |
+------+---------+-----------------------+
|    1 | Michael | admin,reporter,member |
|    2 | Tobias  | reporter              |
|    3 | Colin   | member                |
+------+---------+-----------------------+

Sekarang pendekatan yang lebih baik adalah membuat tabel asosiasi sebagai

mysql> create table user_to_group (uid int, gid int);
Query OK, 0 rows affected (0.15 sec)

mysql> insert into user_to_group values (1,1),(1,2),(1,3),(2,2),(3,1);
Query OK, 5 rows affected (0.02 sec)
Records: 5  Duplicates: 0  Warnings: 0

Dan kueri yang lebih baik adalah

select 
u.uid,
u.name, 
group_concat(g.title) as groups 
from frontend_users u 
join user_to_group ug on ug.uid = u.uid 
join usergroup g on g.uid = ug.gid 
group by u.uid ;

+------+---------+-----------------------+
| uid  | name    | groups                |
+------+---------+-----------------------+
|    1 | Michael | member,admin,reporter |
|    2 | Tobias  | reporter              |
|    3 | Colin   | member                |
+------+---------+-----------------------+


  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 bisa menghasilkan grafik dinamis dengan data MySQL?

  2. Tabel besar di mysql Memperbarui baris berdasarkan csv setiap saat

  3. Indeks set karakter awal yang tidak diketahui '255' diterima dari server

  4. Masuk-Otentikasi ke database mysql jarak jauh

  5. Bisakah Anda menghilangkan persiapan PDO jika tidak ada placeholder/data dinamis dalam kueri?