Witam,
Mam tabele:
gracze:
id_g, punkty
1, 10
2, 10
3, 10
schowki:
id_s, gracz, nazwa
1, 1, "góra"
2, 1, "dom"
3, 1, "grota"
4, 2, "plecak"
5, 2, "kieszeń"
6, 2, "jaskinia"
7, 3, "drzewo"
8, 3, "jama"
9, 3, "skrzynia"
Potrzebuję listę (przykład):
"gracz", "nazwa"
1, losowe z góra, dom lub grota
2, losowe z plecak, kieszeń lub jaskinia
3, losowe z drzewo, jama lub skrzynia
Chcem wylosować po jednym rekordzie "schowki.nazwa" dla każdego garcza "gracze.id_g" przy warunkach:
schowki.gracz=gracze.id_g AND gracze.punkty>0
Zrobiłem coś takiego:
[sql]SELECT `gracz`, `nazwa`
FROM `gracze`, `schowkia`
WHERE `schowki.gracz`=`gracze.id_g` AND `gracze.punkty`>0
GROUP BY `gracz`
ORDER BY RAND()[/sql]
ale jest problem, bo za każdym razem pokazuje tą samą listę:
"gracz", "nazwa"
1, góra
2, plecak
3, drzewo
czyli "schowki.nazwa" to pierwsza napotkana wartość dla każdego nowego "gracze.id_g".
Proszę o podpowiedź co robię źle.
Rozwiązane [SQL] Lista nie taka jaką chcem
Rozwiązane [SQL] Lista nie taka jaką chcem
Ostatnio zmieniony czw gru 06, 2007 8:48 pm przez SzamanGN, łącznie zmieniany 1 raz.
Re: Rozwiązane [SQL] Lista nie taka jaką chcem
Podpowiedź: najpierw przeprowadzane jest grupowanie a pozniej sortowanie.
W takim razie najpierw pogrupuje Ci zeby nie powtarzal sie gracz, a grupowanie sprowadza sie do zostawienia pierwszego unikalnego rekordu a usuniecie pozostalych - czyli zawsze masz pierwszy rekord dla danego gracza.
Przykładowe rozwiazanie:
[sql]SELECT s.gracz,
(select sh.nazwa from schowki as sh where sh.gracz=s.gracz order by rand() limit 1) as nazwa
FROM `gracze` as g, `schowki` as s
WHERE s.gracz=g.id_g AND g.punkty>0
group by s.gracz[/sql]
Pamietaj, ze te losowanie to tak naprawdę liczba pseudolosowa, w takim razie bedziesz miec duzo powtorzen.
W takim razie najpierw pogrupuje Ci zeby nie powtarzal sie gracz, a grupowanie sprowadza sie do zostawienia pierwszego unikalnego rekordu a usuniecie pozostalych - czyli zawsze masz pierwszy rekord dla danego gracza.
Przykładowe rozwiazanie:
[sql]SELECT s.gracz,
(select sh.nazwa from schowki as sh where sh.gracz=s.gracz order by rand() limit 1) as nazwa
FROM `gracze` as g, `schowki` as s
WHERE s.gracz=g.id_g AND g.punkty>0
group by s.gracz[/sql]
Pamietaj, ze te losowanie to tak naprawdę liczba pseudolosowa, w takim razie bedziesz miec duzo powtorzen.
Re: Rozwiązane [SQL] Lista nie taka jaką chcem
Wszystko działa jak chciałem!
Zamykam temat.
Zamykam temat.

