Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Rozwiązane [MySQL] Jak zapytać bazę?, Lista losowych rekordów uzależniona od danych w 2 tabelach
SzamanGN
post
Post #1





Grupa: Zarejestrowani
Postów: 94
Pomógł: 14
Dołączył: 11.10.2007

Ostrzeżenie: (0%)
-----


Witam,

Mam tabele:
gracze: id_g, punkty
schowki: id_s, gracz, nazwa

Potrzebuję listę (przykład):
"nazwa", "gracz"
góra, 1
plecak, 2
drzewo, 3

Jak mogę wylosować po jednym rekordzie "nazwa, gracz" dla każdego garcza "gracz" przy warunkach:
schowki.gracz=gracze.id_g AND gracze.punkty>0

Zrobiłem coś takiego, ale nie działa tak jak chcem:
SELECT `gracz`, `nazwa` FROM `gracze`, `schowkia` WHERE `schowki.gracz`=`gracze.id_g` AND `gracze.punkty`>0 GROUP BY `gracz` ORDER BY RAND()

Proszę o podpowiedź co robię źle.

Ten post edytował SzamanGN 3.12.2007, 19:33:39
Go to the top of the page
+Quote Post
Indeo
post
Post #2





Grupa: Zarejestrowani
Postów: 295
Pomógł: 7
Dołączył: 26.03.2004
Skąd: Opole

Ostrzeżenie: (0%)
-----


Piszesz strasznie niedbale - błędy ortograficzne, literówki w zapytaniu ("schowkia") źle nazwane pola w tabelach i trudny do zrozumienia opis prostego zagadnienia.
Jesli chodzi o sql to zerknij na to:
  1. SELECT S.gracz, S.nazwa FROM gracze G INNER JOIN schowki S ON G.id_g=S.gracz
  2. WHERE G.punkty>0
  3. GROUP BY S.gracz
  4. ORDER BY RAND()
Go to the top of the page
+Quote Post
SzamanGN
post
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 14
Dołączył: 11.10.2007

Ostrzeżenie: (0%)
-----


Oto poprawiony opis problemu:

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:

SELECT `gracz`, `nazwa`
FROM `gracze`, `schowkia`
WHERE `schowki.gracz`=`gracze.id_g` AND `gracze.punkty`>0
GROUP BY `gracz`
ORDER BY RAND()

Pretestowałem też podpowiedź indeo:

SELECT S.gracz, S.nazwa FROM gracze G inner join schowki S on G.id_g=S.gracz
where G.punkty>0
GROUP BY S.gracz
ORDER BY RAND()

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 "schowki.gracz".

Tu jest rozwiązanie mojego problemu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 06:42