Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mencari Pengguna dengan Berbilang Teg Dengan Cekap Menggunakan SQL Joins?

Bagaimana untuk Mencari Pengguna dengan Berbilang Teg Dengan Cekap Menggunakan SQL Joins?

Patricia Arquette
Lepaskan: 2024-12-23 17:30:14
asal
875 orang telah melayarinya

How to Efficiently Find Users with Multiple Tags Using SQL Joins?

SQL untuk Memohon Syarat pada Berbilang Baris dalam Gabungan

Masalah:

Tentukan pengguna yang memiliki kedua-dua 'tag1' dan teg 'tag2' sambil mengelakkan kesan penggunaan 'IN,' yang mengembalikan pengguna dengan sama ada tag.

Penyelesaian:

Untuk memilih baris daripada jadual A berdasarkan dua keadaan baris dalam jadual B, pilih salah satu daripada strategi ini:

1. Menguji Baris Berbeza:

  • WUJUD Klausa: Mengesahkan kewujudan baris dalam jadual B yang sepadan dengan syarat.
SELECT * FROM users WHERE 
  EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name ='tag1') AND
  EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name ='tag2')
Salin selepas log masuk
  • Sub-pertanyaan: Padanan berdasarkan baris dalam jadual B.
SELECT * FROM users WHERE 
  id IN (SELECT user_id FROM tags WHERE name ='tag1') AND
  id IN (SELECT user_id FROM tags WHERE name ='tag2') 
Salin selepas log masuk
  • SERTAI: Mengagregatkan baris dengan bergabung dengan jadual B beberapa kali.
SELECT u.* FROM users u 
     INNER JOIN tags t1 ON u.id = t1.user_id
     INNER JOIN tags t2 ON u.id = t2.user_id
  WHERE t1.name = 'tag1' AND t2.name = 'tag2'
Salin selepas log masuk

2. Mengagregatkan Baris:

  • KIRAAN: Sesuai jika jadual B melindungi daripada teg pendua.
SELECT users.id, users.user_name 
   FROM users INNER JOIN tags ON users.id = tags.user_id
   WHERE tags.name IN ('tag1', 'tag2')
   GROUP BY users.id, users.user_name
   HAVING COUNT(*) = 2
Salin selepas log masuk
  • Pemprosesan Rentetan (bukan SQL standard): Menggabungkan tag ke dalam rentetan dan menyemak kehadiran teg khusus.
SELECT user.id, users.user_name, GROUP_CONCAT(tags.name) as all_tags
  FROM users INNER JOIN tags ON users.id = tags.user_id
  GROUP BY users.id, users.user_name
  HAVING FIND_IN_SET('tag1', all_tags) > 0 AND
         FIND_IN_SET('tag2', all_tags) > 0 
Salin selepas log masuk

Cadangan:

Untuk kebolehskalaan optimum, pertimbangkan untuk menggunakan COUNT dengan teg dilindungi atau pengagregatan dalaman jika berbilang teg boleh muncul untuk pengguna .

Atas ialah kandungan terperinci Bagaimana untuk Mencari Pengguna dengan Berbilang Teg Dengan Cekap Menggunakan SQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan