Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Pobieranie rekordow gdzie w trzech kolumnach...
Forum PHP.pl > Forum > Przedszkole
kvachu
Witam! Mam problem w stworzeniu zapytania, ale najpierw obrazek, który mam nadzieje, że pomoże w zrozumieniu:



Mam tabelę o nazwie "wars" i to sa te klanówki, które widać na obrazku. I teraz chciałbym pobrać np tylko te klanówki z nazwą mapy, w którą kliknę. Czyli przykładowo klikne w mapę Muygen to żeby mi wyswietliło tylko klanówki z Muygen. I mam właśnie taki problem, że jak widać są w klanówkach po dwie rundy(czyli grane mapy), a czasami po trzy. Więc mam trzy kolumny w tabeli "wars" o nazwach: runda1, runda2 i runda3. I problem w tym, że nie potrafię utworzyć zapytania, który mi pobieże tylko te rekordy w których jest ID klikniętej mapy =[.

Póki co zapytanie u mnie wygląda w ten sposób:
  1. $result3 = mysql_query("
  2. SELECT * FROM wars, opponents, users, ligi
  3. WHERE
  4. opponents.id_p = wars.przeciwnik_id
  5. AND
  6. users.ID = wars.gracz1
  7. AND
  8. wars.war_liga = ligi.ligi_id
  9. AND
  10. wars.runda1 = ".$_GET['id']."
  11.  
  12.  
  13. ORDER by rok DESC, miesiac DESC, dzien DESC, wars.id DESC $max");


Oczywiście jak łatwo sie domyślić to zostaną pobrane tylko te klanówki gdzie dana mapa jest wpisana tylko w pierwszej rundzie(mapie), natomiast wpisy z tą mapą w rundach innych niż pierwsza zostaną pominięte.
Próbowałem robić też tak:

  1. $result3 = mysql_query("
  2. SELECT * FROM wars, opponents, users, ligi
  3. WHERE
  4. opponents.id_p = wars.przeciwnik_id
  5. AND
  6. users.ID = wars.gracz1
  7. AND
  8. wars.war_liga = ligi.ligi_id
  9. AND
  10. wars.runda1 = ".$_GET['id']."
  11. AND
  12. wars.runda2 = ".$_GET['id']."
  13. AND
  14. wars.runda3 = ".$_GET['id']."
  15.  
  16.  
  17. ORDER by rok DESC, miesiac DESC, dzien DESC, wars.id DESC $max");


i tak

  1. $result3 = mysql_query("
  2. SELECT * FROM wars, opponents, users, ligi
  3. WHERE
  4. opponents.id_p = wars.przeciwnik_id
  5. AND
  6. users.ID = wars.gracz1
  7. AND
  8. wars.war_liga = ligi.ligi_id
  9. AND
  10. wars.runda1 = ".$_GET['id']."
  11. OR
  12. wars.runda2 = ".$_GET['id']."
  13. OR
  14. wars.runda3 = ".$_GET['id']."
  15.  
  16.  
  17. ORDER by rok DESC, miesiac DESC, dzien DESC, wars.id DESC $max");


Oczywiście w pierwszym przypadku nie ma mowy o żadnym wyniku, bo żadna mapa nie jest grana dwa lub trzy razy w jednym meczu(w grze mojego klanu). Natomiast drugi przykład niby coś tam wypluwa. Ale po pierwsze to trwa to masakrycznie długo, nawet do minuty, a po drugie to wpisy są powielane setki razy, a do tego są złe.
Męczę się z tym już od wczoraj i też sporo szukałem w sieci, ale MySQL to moja słaba strona(nawet bardzo słaba) i muszę niestety prosić was o pomoc. Z góry dzięki.
erix
Cytat
Oczywiście w pierwszym przypadku nie ma mowy o żadnym wyniku, bo żadna mapa nie jest grana dwa lub trzy razy w jednym meczu(w grze mojego klanu). Natomiast drugi przykład niby coś tam wypluwa. Ale po pierwsze to trwa to masakrycznie długo, nawet do minuty, a po drugie to wpisy są powielane setki razy, a do tego są złe.

A indeksy Waść jakieś ma?

Cytat
Oczywiście jak łatwo sie domyślić to zostaną pobrane tylko te klanówki gdzie dana mapa jest wpisana tylko w pierwszej rundzie(mapie), natomiast wpisy z tą mapą w rundach innych niż pierwsza zostaną pominięte.

Nie AND, tylko OR. I zgrupuj to w nawiasach (sprawdzanie mapy), reszta ma być równorzędna.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.