1

次の表をお願いします

Field
+----+--------+----------+---------------------+
| id | name   | Type     | date                |
+----+--------+----------+---------------------+
|  1 |  price | int      | 2009-09-02 00:07:07 |
|  2 |  width | float    | 2009-09-02 00:07:08 |
|  3 |  height| float    | 2009-09-02 00:07:30 |
+----+--------+--------------------------------+


Post
+----+--------+---------------------------------+
| id |title   | Body                            |
+----+--------+---------------------------------+
|  1 |  test  | Bla bla bla                     |
|  2 | Hello  | Bla bla bla                     |
|  3 | Its me | Bla bla bla                     | 
+----+--------+---------------------------------+


Post_Annex
+----+--------+----------+---------------------+
| id | IdPost | IdField  | Value               |
+----+--------+----------+---------------------+
|  1 |  1     | 1        | 50                  |
|  2 |  1     | 2        | 21                  |
|  3 |  1     | 3        | 3                   |
|  4 |  2     | 1        | 10                  |
|  5 |  2     | 2        | 2                   |
|  6 |  2     | 3        | 150                 |
|  7 |  3     | 1        | 1                   |
|  8 |  3     | 2        | 25                  |
|  9 |  3     | 3        | 15                  |
+----+--------+--------------------------------+

そして、PostテーブルとPost_Annexテーブルからデータを選択し、PostテーブルのIDでグループ化し、価格で並べ替えます(これは、Post_AnnexテーブルのIdFieldが1に等しい場合を意味します)。だからこれは私の質問です:

SELECT p.title
    FROM Post p
    LEFT JOIN Post_Annex pa
       ON p.id = pa.IdPost

    GROUP BY p.id

    ORDER BY case when pa.IdField = 1 then 0 else 1, pa.Value DESC

これは私にこの順序で結果を与えました:its Me | Hello | test

これで結構です。しかし、幅(IdField = 2)または高さ(IdField = 3)で並べ替えても、同じ結果が得られました。

私がこれを解決するのを助けるためにアイデアをマスターしてください?前もって感謝します。

4

2 に答える 2

3

ソートするフィールドを指定するために、join句を変更するだけです。

SELECT p.title
FROM Post p
     LEFT JOIN Post_Annex pa
     ON p.id = pa.IdPost
        AND pa.idfield=1
ORDER BY pa.Value DESC

その後、p.idでグループ化する必要はありません。

p.idグループ化を行っているが、他の非集計列を選択(および順序付け)しているため、クエリが常に機能するとは限りません。これらの列の値は未定である可能性があります。

于 2013-01-21T23:27:39.240 に答える
0

単純なSQLでは、group byを避け、次の場合に使用します。

SELECT p.title
FROM Post p, Post_Annex pa
WHERE p.id = pa.IdPost
AND pa.IdField = 1
ORDER BY pa.Value DESC

あなたはそれを簡単に行うことができます。

于 2013-01-21T23:43:19.453 に答える