![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 28.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jako, że to mój pierwszy post to na początek się przywitam. Witam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Mam problem, z którym od dłuższego czasu nie mogę sobie poradzić mimo przeglądania forum oraz list dyskusyjnych.
Jak zapewne domyślacie się z kodu, mam bazę zawodników i chcę wyciągnąc listę graczy z najlepszymi średnimi. Zapytanie chodzi "tak sobie" jeżeli użyje klauzuli GROUP BY, ale nie mogę go używać bo nie o takie sortowanie mi chodzi, po drugie, baza wyciąga nie najlepze średnie a po prostu najlepsze jednorazowe wyniki punktowe danego zawodnika. Chodzi o to by podliczyć wszystkie punkty danego zawodnika z bazy i potem wyciągnąć z tego średnią. Moje zapytanie nie działa w ten sposób po prostu nie umiem robić sumy punktów dla danego gracza, oczywiście można zastosować np. WHERE zawodnik=1 itd., ale wtedy się wyśwetli tylko jeden zawodnik, a ja chcę by było ich więcej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Mam nadzieję, że moje tłumaczenie nie jest zbyt zawiłe. Będę bardzo wdzięczny za wskazówki bo mi już pomysły się skończyły. Ten post edytował Kwiatol 28.01.2006, 14:36:29 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 31.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Mi to ewidentnie podchodzi pod GROUP BY zaw.zawodnik
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Podaj jakąś strukture bazy to sie pomyśli (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 28.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, już poradziłem sobie z tym problemem. Wygląda to mniej więcej tak:
Teraz problem jest taki jak w jednym zapytaniu (czy da się w ogóle) pokazywać tych zawodników, którzy rozegrali przynajmniej 10 meczów. Najpierw trzeba policzycz wszystkie mecze z bazy, a później zrobić mecz_id>10. Jeśli ktoś wie jak to zrobić w jednym zapytaniu będę wdzięczny za odpowiedź. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jest błąd przy GROUP BY, zwróć uwagę na kolorowanie składni:
Masz:
powinno być
ponieważ są to pola , a nie wartości tekstowe. Drugi błąd:
To również nie jest źle, ale (dla porządku) powinienieś albo używać aliasów albo pełnych nazw tabel rpzy kolumnach. Teraz może i działa, ale jak kiedyś dodasz jedno pole o tej samej nazwie , to wszystko sie pomiesza i nie dojdziesz gdzie jest błąd (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Cytat Teraz problem jest taki jak w jednym zapytaniu (czy da się w ogóle) pokazywać tych zawodników, którzy rozegrali przynajmniej 10 meczów. Najpierw trzeba policzycz wszystkie mecze z bazy, a później zrobić mecz_id>10. Jeśli ktoś wie jak to zrobić w jednym zapytaniu będę wdzięczny za odpowiedź. Nie wiem dokładnie o co chodzi (nie napisałeś czy jest to kolumna, wynik funkcji czy coś innego) ale są dwa wyjsćia:
albo dodać odpowiedni warunek w WHERE. Btw, ważna uwaga - pamiętaj o używaniu mysql_escape_string i/albo intval, jeżeli musisz przekazywać parametry między stronami. Ten post edytował spenalzo 1.02.2006, 11:44:45 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 28.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
dzięki śmiga (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Reszte też poprawiłem, to było robocze co prawda, ale dzięki za uwagi.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
jeżeli to jest w ten sposób to zamiast:
daj:
Having jest po prostu nieoptymalne. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 31.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Mam pewne wątpliwości czy to działa tak samo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
HAVING tylko filtruje rekordy (przy użyciu podanego wyrażenia) uzyskane przy pomocy WHERE, już po ich pobraniu przez zapytanie - dlatego jest to niewydajne.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 31.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ale czy count można umieścić w where?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
A czemu nie? (IMG:http://forum.php.pl/style_emoticons/default/blink.gif)
|
|
|
![]()
Post
#13
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
To ja moze wypowiem sie w sprawie tego posta.
@spenalzo Za przeproszeniem, co za pierdoly wypisujesz (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Cytat HAVING tylko filtruje rekordy (przy użyciu podanego wyrażenia) uzyskane przy pomocy WHERE, już po ich pobraniu przez zapytanie - dlatego jest to niewydajne. NIe prawda having jest warunkiem do agregacji czyli do count, max, sum, min, avg itd. Cytat Ale czy count można umieścić w where? Oczywiscie ze nie. Cytat A czemu nie? Bo to logice zaprzecza. Jak mozesz dac warunek do zbioru rekordow, ktorych jeszcze nie znasz. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ojejq, no pomyliło mi sie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
W sumie nie wiem czemu takiego byka zrobiłem skoro wcześniej dobrze napisałem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#15
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Cytat W sumie nie wiem czemu takiego byka zrobiłem skoro wcześniej dobrze napisałem No kazdemu moze sie zdazyc. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) P.S. Mam nadzieje ze po dlugiej przeriwe na forum, czesciej teraz bedziesz bywal. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
[quote=SongoQ,2006-02-01 15:19:00] [QUOTE]P.S. Mam nadzieje ze po dlugiej przeriwe na forum, czesciej teraz bedziesz bywal. [/quote]
Jak sie poziom podforum mysql podniesie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Ostatnio brak ciekawych wyzwań, a w jakby nie patrzeć to tutaj sie nauczyłem mysqla (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) A na serio: bywam częściej (IMG:http://forum.php.pl/style_emoticons/default/Rkingsmiley.png) |
|
|
![]()
Post
#17
|
|
Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jak sie poziom podforum mysql podniesie winksmiley.jpg Ostatnio brak ciekawych wyzwań, a w jakby nie patrzeć to tutaj sie nauczyłem mysqla To juz zalezy od pytajacych. Jesli ktos porusza ciekawsze zagadnienia to oczywiscie dyskusja sie podnosi, ale jest jak jest: pytanie - odpowiedz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 14:41 |