通过字段中的最常见字排序MySQL查询

时间:2009-05-08 13:59:46

标签: mysql sql-order-by

我一直想知道这一点,现在客户想知道它是否可行:

我有一份体育名单,如下所示:

  • Boys Ice Hockey
  • 男孩网球
  • 女子冰上曲棍球
  • 女子网球

...等

他们希望它像:

  • Boys Ice Hockey
  • 女子冰上曲棍球
  • 男孩网球
  • 女子网球

...等

我只是想知道通过简单地改变查询是否可行。不幸的是,我不能将这些运动设定为性别非特异性,并将其性别设定为一个单独的领域。我无法以任何重要方式编辑数据库。我认为解决问题的最佳方法是“大多数常用词汇”查询,但我不知道如何做到这一点。

提前感谢您提供的任何帮助!

更新:客户端最终放弃了请求,但是,我很可能接受它作为接受的答案。仍然不是一种完全令人满意的做事方式,但我不确定MySQL中是否有更“优雅”的解决方案。

2 个答案:

答案 0 :(得分:3)

'大多数共同词'比较每行中的常用词与下一行?这在SQL中会相当困难,因为很难获得查询来比较不同的行。

您可以通过规定性的CASE声明进行排序,但它不会很漂亮:

...
order by CASE sport_name
    WHEN 'Boys Ice Hockey' THEN 1
    WHEN 'Girls Ice Hockey' THEN 2
    WHEN 'Boys Tennis' THEN 3
    WHEN 'Girls Tennis' THEN 4
    -- etc
END CASE

答案 1 :(得分:2)

你能做点什么吗

ORDER BY SUBSTRING(sport_name, 6), SUBSTRING(sport_name, 1, 5) 
如果所有的运动都以Boys / Girls开始,那么在mysql中

如果空间被用作分隔符,则可能更好:

ORDER BY SUBSTRING(sport_name, LOCATE(sport_name, ' ')), SUBSTRING_INDEX(sport_name, ' ', 1)

完全没有经过测试,因为我之前没有尝试过,也没有一个mysql实例来测试它