2012-05-03 3 views
-2

В PostgreSQL 8.4 У меня есть присоединиться всегда возвращающимся 3 строки (они представляют собой 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 then again 0 1 2?

Или мне нужно сделать это в моем PHP-скрипте?

+0

(-1) Я не вижу 'ORDER BY ', только тег' order-by' ... что вы попробовали/что такое «проблема»? –

+0

Конечно, я попробовал «заказать», но пропустил, что могу указать там 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 
; 
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, чтобы получить их заказ, как вы хотите

+0

вы не можете написать заказ раньше, чем предложение. –

+0

'ORDER BY' должно быть после' WHERE'. –

+0

Извините. Обновлен ответ – Arion