我试图搜索所有具有所有已输入标签的用户,但它通过查找同一列来搜索它们。通过查询同一列获取具有所有输入值的所有行
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基于值的数量再添及条款进入,所以如果有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个标签名称。
所以我猜t.name是一个逗号分隔的字段?必须使用'LIKE'进行字符串搜索 – wesside
您可以告诉我们更多关于存储在t.name中的内容吗? – Toby
您可以添加具有预期结果的样本记录吗? –