首页 > 解决方案 > 如果单词在两列中,则优先于 mysql 中的结果

问题描述

我有一张这样的桌子:

menu_id menu_name menu_description 菜单表

如果单词在菜单名称和菜单描述中,我想优先排序结果。我怎样才能做到这一点?

更新:通过这个查询,我得到最相关的结果:

    select menu_id, menu_name, menu_description from ( select menu_id, 
    menu_name, menu_description, case when menu_name like '%salame%' 
    then 1 else 0 end + case when menu_description like '%salame%' 
    then 1 else 0 end as order_value from z8upvan6w_menus) as t order 
    by order_value desc

结果:

    menu_id | menu_name              | menu_description
    13      | Panino Salame e Noci   | Salame, Noci, Caprino e Insalata
    14      | Piadina Salame e Noci  | Salame, Noci, Caprino e Insalata
    11      | Panino Caprese         | Mozzarella, Pomodoro e Insalata
    12      | Panino Boscaiolo       | Speck, Brie e Salsa Boscaiola

我的问题是,如果任何字段中没有“salame”一词,为什么会出现第三和第四条记录,我该如何摆脱它们?

标签: jquerymysql

解决方案


您没有过滤掉任何记录。为此,您需要一个where子句:

select menu_id, menu_name, menu_description
from from z8upvan6w_menus
where (menu_name like '%salame%') or
      (menu_description like '%salame%' )
order by ( (menu_name like '%salame%') +
           (menu_description like '%salame%')
         ) desc;

笔记:

  • where子句进行过滤。
  • 不需要子查询。您可以按表达式排序。
  • 我修改了表达式,因此它使用 MySQL 将布尔值视为数字上下文中的数字的事实,“1”表示真,“0”表示假。

推荐阅读