加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql连接查询多次给出相同的结果

发布时间:2021-01-24 10:12:46 所属栏目:MySql教程 来源:网络整理
导读:我有两张桌子.一种是物品,另一种是标签.查询的here. 这个想法是创建一个搜索框来搜索项目,然后通过选择标签来缩小搜索范围. (某种多面搜索). 摆弄mysql教程后,我想到了: SELECT `items`.`id`,`items`.`name`,`items`.`pay`,`items`.`desc`FROM `items`LEF

我有两张桌子.一种是物品,另一种是标签.查询的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`.`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`.`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 …

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读