【发布时间】:2010-02-23 01:01:24
【问题描述】:
我有两张桌子。一个是items,一个是tags。查询的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 次
- 如果用户选择两个标签,例如 food=>pizza 和 Drinks=>lemonade,每个带有比萨饼或柠檬水或两者的商品都会显示,我只想要同时附有这两个标签的商品。李>
是否有可能用不同的mysql查询来解决这些问题?或者我应该在 php 代码中解决这些问题。 (或者我这样做完全错了,有没有更好的方法来使用标签?)
希望我说清楚了。
格,
基础
【问题讨论】: