2012-07-12 64 views
1

我有兩個表,看起來像這樣:由行值命令MySQL數據

表:項目

id | itemId 
---|------ 
0 | 1 
1 | 2 
2 | 3 

表:item_specs

id | itemId | key   | values 
---|--------|--------------- 
0 | 1  | itemreceived | 2012-06-01 
1 | 1  | modelyear | 1992 
2 | 1  | model  | 2 
3 | 2  | itemreceived | 2012-06-05 
4 | 2  | modelyear | 2003 
5 | 2  | model  | 1 
6 | 3  | itemreceived | 2012-07-05 
7 | 3  | modelyear | 2000 
8 | 3  | model  | 3 

我當前的查詢看起來像這樣:

SELECT items.*, item_specs.* FROM item_specs 
INNER JOIN item_specs ON items.itemId = item_specs.itemId 
WHERE itemId IN(1,2,3) 

如何通過鍵值對結果進行排序,例如:model?

我在尋找的結果是這樣的:(如果我通過模型階)

id | itemId | key   | values 
---|--------|--------------- 
3 | 2  | itemreceived | 2012-06-05 
4 | 2  | modelyear | 2003 
5 | 2  | model  | 1 
0 | 1  | itemreceived | 2012-06-01 
1 | 1  | modelyear | 1992 
2 | 1  | model  | 2 
6 | 3  | itemreceived | 2012-07-05 
7 | 3  | modelyear | 2000 
8 | 3  | model  | 3 

被返回由是有鑰匙模型中的價值訂購的內容

+3

你的意思是'ORDER BY鍵,value' – 2012-07-12 14:50:20

+0

這應該是很容易的,但你需要澄清正是你想。根據上面的表格顯示您正在查找的結果。你想過濾表嗎?對桌子排序?過濾和排序表? – 2012-07-12 14:59:02

+0

@Patrik我們鼓勵個別問題有單獨的問題條目。優先第二個問題是不是真的StackOverflow類型的問題,但請參閱這裏的答案:http://stackoverflow.com/a/11035969/1132642(它被稱爲實體屬性值模型) – 2012-07-12 15:15:40

回答

1

您需要爲每一行的型號。你可以做到這一點與聯接:

SELECT items.*, item_specs.* 
FROM item_specs 
INNER JOIN item_specs ON items.itemId = item_specs.itemId 
INNER JOIN item_specs aux ON (aux.key = 'model' and aux.itemID = item_specs.itemId) 
WHERE item_specs.itemId IN(1,2,3) 
ORDER BY aux.values/*this is the model*/, item_specs.id; 

或子查詢:

SELECT items.*, 
     item_specs.*, 
     (select aux.values 
     from item_specs aux 
     where aux.key = 'model' and aux.itemID = item_specs.itemId 
     ) as model 
FROM item_specs 
INNER JOIN item_specs ON items.itemId = item_specs.itemId 
WHERE item_specs.itemId IN(1,2,3) 
ORDER BY model, item_specs.id; 
1
SELECT * FROM `table` WHERE `key` = 'model' ORDER BY `values` ASC 

您必須手動指定表格類型/存儲引擎。這在你提供的結構中是看不到的。
閱讀全文here

+0

我已經更新了一下這個問題。我想按屬於關鍵模型的值排序 – Patrik 2012-07-12 15:22:38

+0

@Patrik我已更新我的答案,請看一看。 – 2012-07-12 15:28:29

+0

我已更新我的問題。 – Patrik 2012-07-12 16:12:40

0

看來你想使用一個order by子句。這將按您需要的列排序。你也可以在這裏做鬼鬼祟祟的事情,比如爲你先訂購的東西插入一個真/假值。

SELECT * FROM `table` 
    Order by (case When Key='model' then 0 else 1 end), values 

見,例如,http://blog.sqlauthority.com/2007/07/17/sql-server-case-statement-in-order-by-clause-order-by-using-variable/

+0

我想你明白我的意思,但我已經更新了這個問題。我會仔細看看你的答案。 – Patrik 2012-07-12 15:23:24

+0

我已更新我的問題。 – Patrik 2012-07-12 16:13:21

0
SELECT * FROM `table` 
WHERE `key` = 'model' 
ORDER BY `values`; 
+0

我已更新我的問題。 – Patrik 2012-07-12 16:13:03