집 >데이터 베이스 >MySQL 튜토리얼 >SQL 조인을 사용하여 여러 태그가 있는 사용자를 효율적으로 찾는 방법은 무엇입니까?
문제:
'tag1'을 모두 소유한 사용자 확인 및 'tag2' 태그를 사용하는 동시에 사용자에게 다음 중 하나를 반환하는 'IN' 사용 효과를 피합니다. tag.
해결책:
테이블 B의 두 행 조건을 기반으로 테이블 A에서 행을 선택하려면 다음 전략 중 하나를 선택하세요.
1. 다른 행 테스트:
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. 행 집계:
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
권장 사항:
최적의 확장성을 위해 여러 태그가 나타날 수 있는 경우 보호된 태그 또는 내부 집계와 함께 COUNT를 사용하는 것이 좋습니다. 사용자를 위한 것입니다.
위 내용은 SQL 조인을 사용하여 여러 태그가 있는 사용자를 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!