我正在尝试搜索具有所有输入标签的所有用户,但它正在通过查看同一列来搜索它们。
SELECT u.*, t.* FROM user u
LEFT JOIN user_tags ut ON u.id = ut.user_id
LEFT JOIN tags t ON ut.tag_id = t.id
WHERE t.name = tag1 AND t.name = tag2
我仅按标签搜索,每个用户必须拥有所有输入的标签,而不仅仅是 1 个。我正在使用 PHP 根据输入的值的数量添加另一个 AND 子句,因此如果有 3 个值,它将如下所示:
SELECT u.*, t.* FROM user u
LEFT JOIN user_tags ut ON u.id = ut.user_id
LEFT JOIN tags t ON ut.tag_id = t.id
WHERE t.name = tag1 AND t.name = tag2 AND t.name = tag3
t.name 仅包含 1 个标签名称,而不是逗号分隔的值。标签名称通过 user_tags 表链接到每个用户,其中每个用户 ID 可以有多个标签 ID,如下所示:
user_id | tag_id
40 | 3
40 | 4
41 | 1
41 | 2
41 | 3
而且我当前的查询没有返回任何内容,因为没有一列具有所有 3 个标签名称。