我有两个看起来像这样的表:
表:项目
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
返回的内容按具有密钥模型
的值排序答案 0 :(得分:1)
SELECT * FROM `table` WHERE `key` = 'model' ORDER BY `values` ASC
您必须手动指定表类型/存储引擎。在您提供的结构中无法看到这一点 阅读更多here。
答案 1 :(得分: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;
答案 2 :(得分:0)
您似乎想要使用order by子句。这将按您需要的列排序。你也可以在这里做鬼鬼祟祟的事情,比如先为你订购的东西插入一个真/假值。
SELECT * FROM `table`
Order by (case When Key='model' then 0 else 1 end), values
答案 3 :(得分:0)
SELECT * FROM `table`
WHERE `key` = 'model'
ORDER BY `values`;