MySQL查询以搜索特定名称的标记

时间:2016-02-28 20:07:43

标签: php mysql

我正在尝试查询以搜索特定用户名的标记。

我想要实现的是按标签订购名称。

我有一个页面显示某个用户的图像,用户将图片上传到他的页面然后他不能在页面中显示它们

(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

问题是它显示了我想要订购标签的所有名称,我只想获取查询用户名的输出

如果你们了解我想要达到的目标并且可以提供帮助,非常感谢你们!

2 个答案:

答案 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)