我有一个食物数据库,我正在尝试实施一个简单的搜索,将首先放置“原始”或“最少处理”的项目。
例如,当我在寻找“胡萝卜”时,我真的不想整理所有加工食品(胡萝卜蛋糕等),快餐(Wendy's carrot big mac等)。我想要的第一件物品是“胡萝卜,生的”,“胡萝卜,煮熟的”,“胡萝卜冷冻”,“胡萝卜,罐头”等。
有没有办法在MYSQL中执行此操作,以便我首先按“关键字的存在”对项目进行排序(让我们说:“原始”,“新鲜”,“煮沸”,“冻结”......)然后之后的所有其他事件?
注意:
非常感谢!
乔尔
答案 0 :(得分:3)
这可能对您有用:
SELECT * FROM foods
WHERE foods.title LIKE '%carrot%'
ORDER BY foods.title LIKE '%raw%' DESC, foods.title
它是DESC
的原因是因为它将返回0或1,并且您希望首先对返回1的结果进行排序。
答案 1 :(得分:1)
自然单词搜索根据相关性按顺序返回记录,因此如果您在foods.title列中添加了FULLTEXT索引,则只需执行如下搜索:
SELECT *
FROM foods
WHERE MATCH (title) AGAINST ('carrot raw fresh frozen canned')
AND title LIKE 'carrot%'
额外的LIKE标准过滤掉了开头没有单词“carrot”的结果,如“fish,canned”。
FULLTEXT索引目前只能与MyISAM表一起使用,尽管很快(v5.6 +)你也可以将它们与InnoDB一起使用。
答案 2 :(得分:0)
如果处理食物,为什么没有和称为“已处理”的附加字段存储1。然后按处理和名称排序。