-2

PostgreSQL 8.4 では、常に 3 行を返す結合があります (それらは、ridラウンドでゲームをプレイしている 3 人のプレーヤーを表します) -

# SELECT r.rid, c2.pos, c2.money, c2.last_ip, c2.quit,
u.id, u.first_name
FROM pref_rounds r
JOIN pref_cards c1 USING (rid)
JOIN pref_cards c2 USING (rid)
JOIN pref_users u ON u.id = c2.id
WHERE c1.id = 'OK336197153288';
  rid   | pos | money |     last_ip     | quit |          id           | first_name
--------+-----+-------+-----------------+------+-----------------------+------------
 165684 |   0 |    14 | 77.91.175.242   | f    | OK336197153288        | Елена
 165684 |   1 |    -2 | 195.177.124.218 | f    | OK3982469933          | Константин
 165684 |   2 |   -14 | 92.243.183.44   | f    | MR438331292705069453  | Дмитрий

 165711 |   2 |    10 | 77.91.175.242   | f    | OK336197153288        | Елена
 165711 |   0 |    -2 | 195.177.124.218 | f    | OK3982469933          | Константин
 165711 |   1 |    -6 | 92.243.183.44   | f    | MR438331292705069453  | Дмитрий

 165764 |   1 |    13 | 77.91.175.242   | f    | OK336197153288        | Елена
 165764 |   2 |   -17 | 195.177.124.218 | f    | OK3982469933          | Константин
 165764 |   0 |     3 | 92.243.183.44   | f    | MR438331292705069453  | Дмитрий

残念ながら、それらはポジション (プレイ テーブルのポジションである 2 列目) でソートされていません。

SQL で上記の 3 行のセットを常にpos : 0 1 2 と 0 1 2 になるように並べ替える方法はありますか?

または、PHPスクリプトでそれを行う必要がありますか?

4

2 に答える 2

1

次の SQL クエリを使用します。必要な結果が得られます。

# SELECT r.rid, c2.pos, c2.money, c2.last_ip, c2.quit,
u.id, u.first_name
FROM pref_rounds r
JOIN pref_cards c1 USING (rid)
JOIN pref_cards c2 USING (rid)
JOIN pref_users u ON u.id = c2.id
WHERE c1.id = 'OK336197153288'
Order by r.rid asc, c2.pos asc
;
于 2012-05-03T06:34:03.223 に答える
1

多分このようなもの:

SELECT r.rid, c2.pos, c2.money, c2.last_ip, c2.quit,
u.id, u.first_name
FROM pref_rounds r
JOIN pref_cards c1 USING (rid)
JOIN pref_cards c2 USING (rid)
JOIN pref_users u ON u.id = c2.id
WHERE c1.id = 'OK336197153288'
ORDER BY r.rid,c2.pos;

あなたが望むようにそれらを注文するr.ridために、最初に注文する必要がありますc2.pos

于 2012-05-03T06:34:50.977 に答える