【问题标题】:How to use MySQL like with order by exact match first如何首先使用精确匹配的顺序来使用 MySQL
【发布时间】:2015-07-09 11:09:06
【问题描述】:

我使用的是 MySQL 5.5,所以我不能使用 FULLTEXT 搜索,所以请不要推荐它。

我想要做的是如果用户我有 5 条记录,例如:

Amitesh
Ami
Amit
Abhi
Arun

如果有人搜索 Ami,那么它应该首先返回 Ami 作为完全匹配,然后返回 Amit & Amitesh

【问题讨论】:

标签: mysql sql


【解决方案1】:

你可以这样做:

select *
from table t
where col like '%Ami%'
order by (col = 'Ami') desc, length(col);

【讨论】:

  • 你能解释一下查询中使用的长度(col)吗?
  • 可能在 'Amitech' 之前返回 'Amit'
  • 如果我想匹配 2 列那么我该如何写 length(col) ?
【解决方案2】:
SELECT *
FROM table t
WHERE col LIKE '%Ami%'
ORDER BY INSTR(col,'Ami') asc, col asc;

【讨论】:

  • 应该是第一个 Order By 上的 DESC 以使其按 OP 的要求工作:ORDER BY INSTR(col, 'Ami') DESC, col ASC。就是说,谢谢!这在 Doctrine/Symfony(启用了 Doctrine 扩展)中具有魅力,而所选答案因= 符号而中断
【解决方案3】:

order by 中使用like 可以找到更准确的输出。

SELECT * FROM `table_name` WHERE col LIKE '%ami%' order by (col LIKE 'ami%') desc;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2011-12-08
    相关资源
    最近更新 更多