2016-08-26 62 views
0

我有一個問題。我想排列列的順序減少。 iphone4,iphone5,iphone6。例如:php mysql由多個柱選擇訂單

Name |iphone4 |iphone5|iphone6 
john | 6  | 7  | 8  
Smith| 6  | 9  | 8  
Louis| 6  | 7  | 10  
Nick | 7  | 7  | 8  
john | 2  | 7  | 4 
Smith| 7  | 7  | 5 

這是我的MySQL

Select Name, SUM(iphone4) ,SUM(iphone5),SUM(iphone6) from orders group by Name order by iphone4 DESC, iphone5 DESC, iphone6 DESC 

但它唯一的工作列的iphone4和iphone5的。其餘的,iphone6它不工作 誰能幫助我?

+0

這是您的實際查詢嗎?爲什麼按名稱分組?另外,請編輯您的問題以添加您想查看的結果,以及查詢結果爲何... – ppeterka

+0

請參閱規範化。數據庫表格不是電子表格。 – Strawberry

+0

我確實更新了我的問題。你能幫我解決我的問題嗎?謝謝 –

回答

0

如果將值存儲爲字符串而不是數字,則該命令似乎不起作用。

如果是這種情況,然後將它們轉換成數字修復該問題:

Select m.* 
from mark m 
order by (mathematics + 0) DESC, (physics + 0) DESC, (chemistry + 0) DESC; 

此外,沒有GROUP BY似乎有需要此查詢。

編輯:

經編輯的版本,你需要在order by的聚集以及在select。是顯式的,我會寫這些爲:

Select Name, SUM(iphone4+0), SUM(iphone5+0), SUM(iphone6+0) 
from orders 
group by Name 
order by SUM(iphone4+0) desc, SUM(iphone5+0) desc, SUM(iphone6+0) desc; 
+0

是的。那就對了。他們是價值觀的字符串。 –

+0

我確實嘗試過但不起作用 –

+0

如果select子句中沒有聚合,請不要再使用group。它被棄用和嚴重不規範,所以如果你想轉換到另一個數據庫,你將不得不修改所有的查詢。另外,使用隱式類型轉換作爲解決方案顯示的並不是真正實現此目的的正確方法。看看cast()和convert()函數。 –

0

Cast Functions and Operators:

描述的類型的結果可以是以下值之一:

  • BINARY [(N )]
  • CHAR [(N)]
  • DATE
  • DATETIME
  • DECIMAL [(M [,d])
  • 簽署[INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

所以您的查詢就會像

Select m.* 
from mark m 
order by CAST(mathematics AS UNSIGNED) DESC, CAST(physics AS UNSIGNED) DESC, CAST(chemistry AS UNSIGNED) DESC; 
+0

我確實更新了我的問題。你能幫我解決我的問題嗎?謝謝 –