mysql连接查询多次给出相同的结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql连接查询多次给出相同的结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1815字,纯文字阅读大概需要3分钟。
内容图文
![mysql连接查询多次给出相同的结果](/upload/InfoBanner/zyjiaocheng/880/9ef085d000e54d21b591609dce2f5dcc.jpg)
我有两张桌子.一种是物品,另一种是标签.查询的here.
这个想法是创建一个搜索框来搜索项目,然后通过选择标签来缩小搜索范围. (某种多面搜索).
摆弄mysql教程后,我想到了:
SELECT `items`.`id`, `items`.`name`, `items`.`pay`, `items`.`desc`
FROM `items`LEFT JOIN (`tags`) ON (`tags`.`item_id`=`items`.`id`)
WHERE (
(`tags`.`type`='food' AND `tags`.`name`='pizza')
OR (`tags`.`type`='drinks' AND `tags`.`name`='lemonade')
--And so on for every tag
)
ORDER BY `pay` DESC LIMIT 0 , 30
(我删除了查询中的全文搜索,因为它现在不相关了)
它工作得很好,但是我有两个问题:
>如果用户未选择任何标签,则每个附加了1个以上标签的商品都会显示1次以上
>例如,如果用户选择食物=>比萨饼和饮料=>柠檬汁这两个标签,则每个带有比萨饼或柠檬水或两者都显示的项目将显示,我只希望同时贴有两个标签的项目.
是否可以使用其他mysql查询解决这些问题?还是应该在php代码中解决这些问题. (或者我这样做是完全错误的,还有使用标记的更好方法吗?)
希望我能说清楚.
,
巴斯
解决方法:
在SELECT之后输入关键字DISTINCT?
SELECT DISTINCT `items`.`id`, `items`.`name`, `items`.`pay`, `items`.`desc`
FROM `items`LEFT JOIN (`tags`) ON (`tags`.`item_id`=`items`.`id`)
WHERE (
(`tags`.`type`='food' AND `tags`.`name`='pizza')
OR (`tags`.`type`='drinks' AND `tags`.`name`='lemonade')
--And so on for every tag
)
ORDER BY `pay` DESC LIMIT 0 , 30
至于第二个问题……你的逻辑是错误的.如果我对您的理解正确,则希望按items.id分组,然后拒绝那些返回的行数与所选标签数不相同的项目……也许是这样的:
SELECT DISTINCT `items`.`id`, `items`.`name`, `items`.`pay`, `items`.`desc`
FROM `items`LEFT JOIN (`tags`) ON (`tags`.`item_id`=`items`.`id`)
WHERE (
(`tags`.`type`='food' AND `tags`.`name`='pizza')
OR (`tags`.`type`='drinks' AND `tags`.`name`='lemonade')
--And so on for every tag
)
GROUP BY `items`.`id`
HAVING COUNT(*) = 2
ORDER BY `pay` DESC LIMIT 0 , 30
…并用您尝试同时匹配的标签数替换HAVING COUNT(*)= 2中的2 …
内容总结
以上是互联网集市为您收集整理的mysql连接查询多次给出相同的结果全部内容,希望文章能够帮你解决mysql连接查询多次给出相同的结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。