Heim >Datenbank >MySQL-Tutorial >Wie kann man mithilfe von SQL-Joins effizient Benutzer mit mehreren Tags finden?
Problem:
Ermitteln Sie Benutzer, die sowohl „tag1“ als auch „tag1“ besitzen. und „tag2“-Tags, während der Effekt der Verwendung von „IN“ vermieden wird, der Benutzer mit beiden zurückgibt Tag.
Lösung:
Um Zeilen aus Tabelle A basierend auf zwei Zeilenbedingungen in Tabelle B auszuwählen, wählen Sie eine dieser Strategien:
1. Testen verschiedener Zeilen:
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')
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')
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'
2. Zeilen aggregieren:
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
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
Empfehlung:
Für eine optimale Skalierbarkeit sollten Sie die Verwendung von COUNTs mit geschützten Tags oder innerer Aggregation in Betracht ziehen, wenn für einen Benutzer mehrere Tags angezeigt werden können.
Das obige ist der detaillierte Inhalt vonWie kann man mithilfe von SQL-Joins effizient Benutzer mit mehreren Tags finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!