【问题标题】:How to sort an mysql Result?如何对mysql结果进行排序?
【发布时间】:2021-06-29 01:54:38
【问题描述】:

表:

 id        title

1.         php is a good language.
2.         Java is a good language
3.         All language are good
4.         Php,Java both good language
5.         Php is good but Java is not

问题

字符串:$#

$string = "php Java language"

结果顺序

php ,Java both  good language
-------------------------
php is good Java is not

-------------------------
php is good language 
---------------------------
Java is good language
------------------------
all language are good

我不知道如何通过字符串中匹配的单词数来获得订单列表。

如果你能解释一下查询,那就太好了。

谢谢。

【问题讨论】:

    标签: php mysql sorting


    【解决方案1】:

    然后将您的字符串转换为 JSON 数组

    SELECT test.id, test.tittle
    FROM test
    LEFT JOIN JSON_TABLE(@criteria, 
                         "$[*]" COLUMNS (word VARCHAR(255) PATH "$")) jsontable ON LOCATE (jsontable.word, test.tittle)
    GROUP BY test.id, test.tittle
    ORDER BY SUM(jsontable.word IS NOT NULL) DESC
    

    @criteria 是上面提到的 JSON 数组的占位符。

    当然,您可以将条件作为空格分隔的字符串提供,并在查询中使用字符串函数将其转换为 JSON。


    不使用 JSON 的版本:

    WITH RECURSIVE
    cte AS (SELECT test.id, 
                   test.tittle, 
                   0 amount, 
                   TRIM(TRIM(LEADING SUBSTRING_INDEX(@criteria, ' ', 1) FROM @criteria)) criteria, 
                   SUBSTRING_INDEX(@criteria, ' ', 1) token
            FROM test
            UNION ALL
            SELECT id, 
                   tittle,
                   amount + (LOCATE(token, tittle) > 0),
                   TRIM(TRIM(LEADING token FROM criteria)),
                   SUBSTRING_INDEX(criteria, ' ', 1)
            FROM cte
            WHERE TRIM(criteria) != '' )
    SELECT id, tittle
    FROM cte
    GROUP BY id, tittle
    ORDER BY MAX(amount) DESC;
    

    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=3ab611ed7429e23be2abfcb8b0186e6d

    【讨论】:

    • 不用json能行吗
    • @MixUp 我可以。解决方案取决于:精确的 MySQL 版本;最大限度。每个条件字符串的令牌数量。
    • 最新的 MySQL 版本。你能解释一下逐行查询吗?
    • 我想要一个没有 json 的简单查询。我可以在哪里实现其他条件,例如两行是否相同。单词然后按 id 等排序。
    • @MixUp latest MySQL version 如果是这样,那么 do it without json 表示“按原样提供以空格分隔的条件”,即它?如果没有,则需要递归 CTE - 它对您有用吗?
    猜你喜欢
    • 2012-05-22
    • 2013-09-08
    • 1970-01-01
    • 2014-01-08
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2021-08-25
    相关资源
    最近更新 更多