我正在尝试查询以搜索特定用户名的标记。
我想要实现的是按标签订购名称。
我有一个页面显示某个用户的图像,用户将图片上传到他的页面然后他不能在页面中显示它们
(pictures.php?user=John%Doe&tag=waterfall)
然后我用URL
中的参数值设置一个变量$user = $_GET['user'];
$tag= $_GET['tag'];
在我的数据库中,表格是这样形成的(图片是通过链接设置的,所以我只是举一个示例链接):
user_name | picture | tag1 | tag2 | tag3 | tag4
John Doe | example.com/picture1 | waterfall | jungle | null | Green
Carl Johnson | example.com/picture4 | null | waterfall | forest | null
Joseph | example.com/picture14 | street | car | people | null
他们都有不同标签的不同图片
我试着像这样查询
SELECT * FROM tb_user WHERE name = '$user' AND tag1= '$tag' OR tag2 = '$tag' OR tag3 = '$tag' OR tag4 = '$tag'
这是最接近我想要的问题的问题是输出不是我特别想要的
输出(我有一个显示数据的表,它是这样的):
John Doe | example.com/picture1 | waterfall
Carl Johnson | example.com/picture4 | waterfall
问题是它显示了我想要订购标签的所有名称,我只想获取查询用户名的输出
如果你们了解我想要达到的目标并且可以提供帮助,非常感谢你们!
答案 0 :(得分:3)
您需要在标记周围加上一个括号。 WHERE子句不正确
SELECT * FROM tb_user WHERE name = '$user' AND (tag1= '$tag' OR tag2 = '$tag' OR tag3 = '$tag' OR tag4 = '$tag')
答案 1 :(得分:2)
问题在于您的or
逻辑。如果这些标签匹配,它包括其他名称。易于解决,只需使用括号:
SELECT *
FROM tb_user
WHERE (name = '$user') AND
(tag1= '$tag' OR tag2 = '$tag' OR tag3 = '$tag' OR tag4 = '$tag')
或许您可以使用in
:
SELECT *
FROM tb_user
WHERE name = '$user' AND '$tag' IN (tag1,tag2,tag3,tag4)