1

次のような 2 つのテーブルがあります。

表:アイテム

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)

モデルなどのキー値で結果を並べ替えるにはどうすればよいですか?

私が探している結果は次のようなものです: (モデルで注文した場合)

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

返されるコンテンツは、キー モデルを持つ値によって並べ替えられます。

4

4 に答える 4

1
SELECT * FROM `table` WHERE `key` = 'model' ORDER BY `values` ASC

テーブル タイプ/ストレージ エンジンを手動で指定する必要があります。それはあなたが提供した構造には見られません。
詳細はこちらをご覧ください

于 2012-07-12T14:53:50.497 に答える
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;
于 2012-07-13T08:07:25.303 に答える
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/を参照してください。

于 2012-07-12T15:08:26.840 に答える
0
SELECT * FROM `table` 
WHERE `key` = 'model' 
ORDER BY `values`;
于 2012-07-12T15:27:44.173 に答える