【问题标题】:MySQL "Order By" queryMySQL“排序依据”查询
【发布时间】:2014-10-13 10:32:22
【问题描述】:

我有or 逻辑运算符的选择查询,如下所示:

SELECT * FROM grabli_new.product where article like '%AV2%' or article like '%AV22%';

我需要按“相似模式的长度”对结果集进行排序(在我的情况下,包含最长模式的行 '%AV22%' 必须在结果集的开头)。查询必须返回所有开头包含'%AV22%' 模式的结果,然后才返回所有包含'%AV2%' 模式的结果。有可能吗?

【问题讨论】:

标签: mysql sql


【解决方案1】:

你可以尝试使用这样的东西:

SELECT *, case when article like '%AV22%' 
                    then 1 
                    when article like '%AV2%' 
                    then 2 end orderIndex 
FROM grabli_new.product 
where article like '%AV2%' or article like '%AV22%'
order by orderIndex

【讨论】:

  • 非常感谢。这个查询正是我需要的
【解决方案2】:

如果要计算(多字节)字符,请改用 CHAR_LENGTH 函数:

ORDER BY CHAR_LENGTH( column )

【讨论】:

    【解决方案3】:
    SELECT * 
    FROM grabli_new.product 
    WHERE article LIKE '%AV2%' OR article LIKE '%AV22%' 
    ORDER BY char_length(article) DESC
    

    【讨论】:

    • 那行不通!模式的长度很重要,而不是文章本身的长度。
    • “0AV220”和“1AV210”你会做什么?
    • @DirkNM : Legnth 计算将只对文章后过滤结果集进行。
    • @Mikhalil :我使用了 Char_Length() 而不是 length()。
    • @knkarthikck24:不会改变任何东西。那不是OP想要的。顺便说一句,这不是我评论的原始答案。
    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    相关资源
    最近更新 更多