【问题标题】:Sort SQL records based on matched conditions根据匹配条件对 SQL 记录进行排序
【发布时间】:2011-04-13 09:44:42
【问题描述】:

我有这个问题:

SELECT * FROM table WHERE key LIKE '1,2,3,%' OR key LIKE '1,2,%' OR key LIKE '1,%'

是否可以根据首先匹配的条件对从此查询返回的记录进行排序。我想首先获取与key LIKE '1,2,3,%' 匹配的所有记录,然后是key LIKE '1,2,%' 和其他记录。

例如,如果我有这些记录:

key: "1,2,3,4"
key: "1,2,5"
key: "1,4"
key: "1,2,5,6"
key: "1,3"
key: "1,2,3,4,7"
key: "1,2,4"

我希望它们像这样排序:

key: "1,2,3,4"
key: "1,2,3,4,7"
key: "1,2,4"
key: "1,2,5"
key: "1,2,5,6"
key: "1,3"
key: "1,4"

可以吗?

【问题讨论】:

  • 嗯,你试过什么?请注意,这只是正常的词法字符串排序...
  • 您的查询是多余的。仅使用“WHERE key LIKE '1,%'”会得到相同的结果。
  • @Kevin,是的,你是绝对正确的。由于我现在在“ORDER BY CASE”中使用更具体的条件,因此我现在将 WHERE 条件更改为仅“1,%”。

标签: sql mysql


【解决方案1】:

使用MATCH ... AGAINST 并按等级排序。它完全符合您的要求。

【讨论】:

    【解决方案2】:

    .... ORDER BY CASE
    WHEN key LIKE '1,2,3,%' THEN 1
    WHEN key LIKE '1,2,%' THEN 2
    ELSE 3
    END

    【讨论】:

    • 我会使用它,因为它对我来说很熟悉。
    • 谢谢!这正是我使用的。在我看来,对于这种特殊情况,使用全文搜索有点过于耗费资源。
    【解决方案3】:

    使用“UNION”可以完成这项工作吗?

    SELECT * FROM table WHERE key LIKE '1,2,3,%' 联盟 SELECT * FROM table WHERE key LIKE '1,2,%' 联盟 SELECT * FROM table WHERE key LIKE key LIKE '1,%'

    【讨论】:

      最近更新 更多