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

MySQL ::Pilih dari string yang dipisahkan koma

Lebih baik untuk menormalkan skema Anda, jangan menyimpan hubungan dalam bentuk daftar yang dipisahkan koma alih-alih buat tabel persimpangan untuk ini seperti mempertahankan m:m hubungan banyak ke banyak antara pengguna dan filter, buat tabel baru sebagai user_filters dengan kolom filter id dan user id dan di setiap baris simpan satu asosiasi per pengguna dan filter seperti dalam hubungan skema Anda saat ini untuk filter 1 dengan banyak pengguna (1, '1, 2, 3') akan menjadi seperti

filter id user id
    (1, '1'),
    (1, '2'),
    (1, '3'),

Contoh skemanya akan seperti ini

CREATE TABLE user_filters
    (`fid` int, `u_id` varchar(50))
;

INSERT INTO user_filters
    (`fid`, `u_id`)
VALUES
    (1, '1'),
    (1, '2'),
    (1, '3'),
    (2, '5'),
    (2, '5')
;

CREATE TABLE filters
    (`id` int, `title` varchar(50))
;

INSERT INTO filters
    (`id`, `title`)
VALUES
    (1, 'test'),
    (2, 'test 1')
;


CREATE TABLE users
    (`id` int, `name` varchar(6))
;

INSERT INTO users
    (`id`, `name`)
VALUES
    (1, 'Tom'),
    (2, 'Tim'),
    (3, 'Sue'),
    (4, 'Bruce'),
    (5, 'Ann'),
    (6, 'George')
;

Untuk skema di atas Anda dapat dengan mudah melakukan query dengan join as, query di bawah ini dapat dioptimalkan menggunakan indeks

select u.* 
from users u
join user_filters uf on(uf.u_id = u.id)
 where uf.fid =1

Contoh Demo

Jika Anda tidak dapat mengubah skema dan ingin tetap menggunakan skema saat ini, Anda dapat melakukan kueri seperti di bawah ini, tetapi skema ini tidak dapat dioptimalkan secara memadai dibandingkan dengan kueri di atas

select u.* 
from users u
join filters f on(find_in_set(u.id,replace(`u_ids`,' ','')) > 0)
 where f.id =1 

Contoh Demo

Normalisasi Basis Data




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLSTATE[HY093]:Nomor parameter tidak valid:parameter tidak ditentukan

  2. Bagaimana cara memperbaiki simbol eksternal yang tidak terselesaikan karena Konektor MySql C++?

  3. Docker - Jalankan Apache di host dan wadah untuk situs web yang berbeda

  4. Apa konvensi penamaan yang tepat untuk FK MySQL?

  5. MySQL GROUP BY beberapa kolom dari tabel yang berbeda