kitol
19.01.2007, 11:03:25
Mamy tabelę (id, grupa)
0 , 0
1 , 0
2 , 0
3 , 1
4 , 2
5 , 3
6 , 3
Jak wylosować w jednym zapytaniu po jednym id z każdej grupy? Tzn. chcę mieć jedno zapytanie które zwróci w przypadku tej tabeli 4 liczby: pierwsza z przedziału (0-2), druga =3, trzecia=4, czwarta (5 lub 6).
Zrobiłem to w pętli, ale w takim przypadku mam aż 5 zapytań.
ferr
19.01.2007, 13:27:53
"SELECT id, id_grupa FROM tabela GROUP BY id_grupa"
?
kitol
19.01.2007, 13:33:58
Tak to działa

, ale nie oto mi chodziło. Nie sprecyzowałem, że pojedyńcza wartość ma być losowana z grupy kilku elementowej. To zapytanie zwraca zawsze taki sam zestaw.
ferr
19.01.2007, 13:54:55
SELECT id, id_grupa FROM tabela GROUP BY id_grupa ORDER BY RAND()
kitol
19.01.2007, 14:09:33
też nie do końca dobrze bo jak zechcę posortować po grupa to mi nie działa.
Wykombinowałem coś takiego:
SELECT * FROM ( SELECT id,id_grupa
FROM tabela ORDER BY RAND()
) AS a GROUP BY id_grupa ORDER BY id_grupa DESC;
ferr
19.01.2007, 14:25:41
Wydaje mi sie, ze cos takiego pozwoli posortowac po grupie:
SELECT id, id_grupa FROM tabela GROUP BY id_grupa ORDER BY RAND(), id_grupa
kitol
19.01.2007, 14:43:13
niestety nie działa: zwraca zawsze ten sam zestaw id, grupa w losowej kolejności.