2009-05-08 45 views
2

我一直想知道這個訂購一個MySQL查詢的最常見的詞,現在客戶想知道它是否是feasable:在現場

我有運動的名單,分解像這樣:

  • 少年冰球
  • 男孩網球
  • 女子冰球
  • 女子網球

...等

而且他們希望它有點像:

  • 少年冰球
  • 女子冰球
  • 男孩網球
  • 女子網球

...等

我只是想知道這是否可能通過簡單地改變查詢。不幸的是,我不能將運動設置爲非特定性別,並將其性別設置爲單獨的領域。我無法以任何重要的方式編輯數據庫。我認爲解決這個問題的最好方法是「最常用的詞」查詢,但我不知道這將如何完成。

在此先感謝您提供的任何幫助!

更新:客戶端最終放棄了請求,但是,我會盡可能接近它接受的答案。仍然不是一個完全令人滿意的做事方式,但我不確定MySQL中是否有更「優雅」的解決方案。

回答

2

你可以這樣做

ORDER BY SUBSTRING(sport_name, 6), SUBSTRING(sport_name, 1, 5) 

在MySQL中,如果所有的體育與男孩/女孩開始?

或者如果該空間被用作分隔符下方可能會更好:

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

沒有經過充分測試,因爲我還沒有嘗試過這一點,並沒有一個MySQL實例來測試它反對

+0

更新爲我在SUBSTRING和位置從1開始混合起來的長度和起始位置參數我相信 – Trotts 2009-05-08 14:20:06

+0

這不會解決問題*一般*,會嗎?:) – Tomalak 2009-05-08 14:31:21

+0

是的,就像我說我沒有測試它,我無法atm,我把第二個選項在那裏可能會稍微更強大,假設它工作:) – Trotts 2009-05-08 14:40:05

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 
+0

+1務實的態度。這可能是實現這一目標的唯一方式,並且結果可預測,時間有限。 – Tomalak 2009-05-08 14:32:32