[英]CodeIgniter sql query with limit and offset not showing results
[英]SQL query - Limit results if no match
背景:
这是一个用于搜索数据库的产品的查询,SQL是根据用户搜索的内容动态构建的。
SELECT *
FROM gifts
LEFT JOIN tags_gifts ON tags_gifts.gift_id = gifts.gift_id
LEFT JOIN tags ON tags.id = tags_gifts.tag_id
WHERE published = '1'
AND ( (tags_gifts.tag_id = '887') )
GROUP BY gifts.gift_id
ORDER BY COUNT(*) DESC , gift_popularity DESC
这正在按计划进行,但是我正在努力的下一部分正在苦苦挣扎。
我有另一个表' tags_gifts_occasion_specific ',其中有' gift_id '和' tag_id '列
基本上,如果用户进行上述搜索,但没有要搜索的tag_id或他们搜索的tag_id与tag_gifts_occasion_specific.tag_id中的tag_id不匹配,那么我想排除这些结果。
我是否需要在此语句内执行另一条select语句以实现这一目标? 希望这有意义
尝试这个 :
SELECT *
FROM gifts AS g
LEFT JOIN tags_gifts_occasion_specific AS os ON g.gift_id = os.gift_id
LEFT JOIN tags_gifts ON tags_gifts.gift_id = gifts.gift_id
LEFT JOIN tags ON tags.id = tags_gifts.tag_id
WHERE published = '1'
AND (os.tag_id IS NULL OR os.tag_id = '887')
AND tags_gifts.tag_id = '887'
GROUP BY gifts.gift_id
ORDER BY COUNT(*) DESC , gift_popularity DESC
最终通过执行以下操作解决了此问题:
AND NOT EXISTS ( SELECT * FROM tags_gifts_occasion_specific WHERE tags_gifts_occasion_specific.gift_id = gifts.gift_id)
然后进行搜索,其中已包含标签:
AND NOT EXISTS ( SELECT * FROM tags_gifts_occasion_specific WHERE tags_gifts_occasion_specific.gift_id = gifts.gift_id AND tags_gifts_occasion_specific.tag_id != '971' )
感谢okio的帮助-正是您的回答使我朝着正确的方向发展:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.