Temat: Ciekawy SELECT.. (przynajmniej dla mnie)

Wydawało mi się, że już ten select załatwiłem i nawet byłem trochę dumy, że udało mi się to samemu "rozwalić", ale chyba się trochę pośpieszyłem..

Mam takie zapytanie:


SELECT idUzytkownik, idKonkurencjiPerZawody, wynik FROM wyniki_2012 WHERE idKonkurencjiPerZawody =
(SELECT kpz.idKonkurencjiPerZawody
FROM konkurencjeperzawody kpz
INNER JOIN konkurencje k ON kpz.idKonkurencji = k.idKonkurencji
INNER JOIN zawodynazwa zn ON kpz.idZawodyNazwa = zn.idZawodyNazwa
WHERE k.nazwaKonkurencji LIKE 'pistolet szyb%' && zn.nazwaZawody LIKE 'Ogólno%') ;


i z tego taki efekt (tabele):

idUzytkownika | idKonkurencjiPerZawody | wynik
-----------------------------------------------------------------------------------
2 | 3 | 35
2 | 3 | 99
1 | 3 | 19
1 | 3 | 27

I teraz próbuje uzystkać taki efekt aby tylko najwyższe wyniki zostały przekazany jakby wyżej... by następnie po idUzytkownik "połączyć" to z tabelą uzytkownicy i w konsekwencji wypisać imieUzytkownika, nazwiskoUzytkownka i najwyzsze wyniki..

Próbowałem coś takiego:
(ale tutaj przekłamane są najwyższe wyniki.. tzn. coś tam nie trybi..)


SELECT imieUzytkownika, nazwiskoUzytkownika, w.wynik, MAX(w.wynik) FROM uzytkownicy u, wyniki_2012 w WHERE u.idUzytkownik=w.idUzytkownik AND u.idUzytkownik IN (
SELECT idUzytkownik FROM wyniki_2012 WHERE idKonkurencjiPerZawody =
(SELECT kpz.idKonkurencjiPerZawody
FROM konkurencjeperzawody kpz
INNER JOIN konkurencje k ON kpz.idKonkurencji = k.idKonkurencji
INNER JOIN zawodynazwa zn ON kpz.idZawodyNazwa = zn.idZawodyNazwa
WHERE k.nazwaKonkurencji LIKE 'pistolet szyb%' && zn.nazwaZawody LIKE 'Ogólno%')
GROUP BY idUzytkownik) GROUP BY nazwiskoUzytkownika;
Michał Rodzynek edytował(a) ten post dnia 02.12.12 o godzinie 22:02

konto usunięte

Temat: Ciekawy SELECT.. (przynajmniej dla mnie)

słyszałeś o JOIN-ach?

Temat: Ciekawy SELECT.. (przynajmniej dla mnie)

Dobrze napisałeś.. słyszałem.. nawet są one zastosowane w moich powyższych zapytaniach, ale nie znam ich na tyle dobrze aby znać ich wszystkie możliwości...

Możesz dać jakąś "szerszą" sugestie? Rozumiem, że jakoś idzie to wykonać JOIN-ami ?

konto usunięte

Temat: Ciekawy SELECT.. (przynajmniej dla mnie)

FROM uzytkownicy u, wyniki_2012 w WHERE u.idUzytkownik=w.idUzytkownik


SELECT idUzytkownik FROM wyniki_2012 WHERE idKonkurencjiPerZawody = 
(SELECT kpz.idKonkurencjiPerZawody
FROM konkurencjeperzawody kpz
INNER JOIN konkurencje k ON kpz.idKonkurencji = k.idKonkurencji
INNER JOIN zawodynazwa zn ON kpz.idZawodyNazwa = zn.idZawodyNazwa
WHERE k.nazwaKonkurencji LIKE 'pistolet szyb%' && zn.nazwaZawody LIKE 'Ogólno%')
GROUP BY idUzytkownik)


co to za potworki?

zastanów się nad kolejnością operacji jakie musisz zrobić żeby osiągnąć cel, bo teraz robisz jakieś

1. wybierasz dane detaliczne które chcesz sprawdzić
2. agregujesz dane żeby wyciągnąć max wartość per idUzytkownik
3. do takiego wyniku dodajesz imię i nazwisko

to czy użyjesz podzapytania (niezbyt szybkie) czy temporary table (szybsze) to już twoja wola

Temat: Ciekawy SELECT.. (przynajmniej dla mnie)

Wydaje się, że osiągnąłem zamierzony efekt zapytaniem:


SELECT uzytkownicy.imieUzytkownika
,uzytkownicy.nazwiskoUzytkownika
,MAX(wyniki_2012.wynik)
FROM wyniki_2012
INNER JOIN konkurencjeperzawody
ON wyniki_2012.idKonkurencjiPerZawody = konkurencjeperzawody.idKonkurencjiPerZawody
INNER JOIN konkurencje
ON konkurencjeperzawody.idKonkurencji = konkurencje.idKonkurencji
INNER JOIN zawodynazwa
ON konkurencjeperzawody.idZawodyNazwa = zawodynazwa.idZawodyNazwa
INNER JOIN uzytkownicy
ON wyniki_2012.idUzytkownik = uzytkownicy.idUzytkownik
WHERE konkurencje.nazwaKonkurencji LIKE 'pistolet szyb%'
AND zawodynazwa.nazwaZawody LIKE 'Ogólno%'
GROUP BY uzytkownicy.imieUzytkownika
,uzytkownicy.nazwiskoUzytkownika
ORDER BY MAX(wyniki_2012.wynik)
,uzytkownicy.nazwiskoUzytkownika
,uzytkownicy.imieUzytkownika


Chyba nawet zgodnie z twoimi wskazówkami to wyszlo :P
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: Ciekawy SELECT.. (przynajmniej dla mnie)

Pewnie tak...
http://forum.4programmers.net/Bazy_danych/208071-selec...

Temat: Ciekawy SELECT.. (przynajmniej dla mnie)

Niewątpliwie masz racje .. (ale nic nie pisałem, że sam osiągnąłem ten efetk :) )
Piotr Sebastian Curyło

Piotr Sebastian Curyło właściciel, Lan Set

Temat: Ciekawy SELECT.. (przynajmniej dla mnie)

takie łaczenie to zajedziesz baze danych:) jak bedziesz dużą tablice, jak nie masz index to powodzenia, przeanalizują sobie co robi mysql przy taki łączeniu,
ja to bym inaczej zrobił, najpierw znalazł to co mam szukać za pomocą like
a potem wynik tej tablicy dopiero łączył z joinem z innymi tablicami i porównał
kroki tych zapytań sql które będzie szybsze.
A tak naprawdę to był sie pozbył like '@' i przebudował bazę danych,ale jak jest
czas na to i ma być to duży serwis

Następna dyskusja:

Wyceny dla freelancerów




Wyślij zaproszenie do