首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按行值对MySQL数据进行排序

问按行值对MySQL数据进行排序
EN

Stack Overflow用户
提问于 2012-07-12 22:48:46
回答 4查看 383关注 0票数 1

我有两个表,看起来像这样:

表:项目

代码语言:javascript
复制
id | itemId
---|------
0  | 1
1  | 2
2  | 3

表: item_specs

代码语言:javascript
复制
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

我当前的查询如下所示:

代码语言:javascript
复制
SELECT items.*, item_specs.* FROM item_specs
INNER JOIN item_specs ON items.itemId = item_specs.itemId
WHERE itemId IN(1,2,3)

如何根据键值对结果进行排序,例如: model?

我正在寻找的结果是这样的:(如果我按型号排序)

代码语言:javascript
复制
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

返回的内容按具有键模型的值进行排序

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-13 16:07:25

您需要每一行的型号。您可以使用join来完成此操作:

代码语言:javascript
复制
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;

或使用子选择:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-07-12 22:53:50

代码语言:javascript
复制
SELECT * FROM `table` WHERE `key` = 'model' ORDER BY `values` ASC

您必须手动指定表类型/存储引擎。在你提供的结构中是看不到的。

阅读更多here。

票数 1
EN

Stack Overflow用户

发布于 2012-07-12 23:08:27

您似乎想使用order by子句。这将按您需要的列进行排序。你也可以在这里做一些偷偷摸摸的事情,比如为你第一次排序的东西插入一个true/false值。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11454472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档