Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL - zapytanie - wybierz z bazy...
Forum PHP.pl > Forum > Bazy danych > MySQL
Aztech
Mam następującą strukturę tabeli w bazie danych:
  1. CREATE TABLE `ranking` (
  2. `TID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `TurnID` int(5) NOT NULL DEFAULT '0',
  4. `Miejsce` int(3) NOT NULL DEFAULT '0',
  5. `PersonID` int(3) NOT NULL DEFAULT '0',
  6. `Name` char(32) NOT NULL DEFAULT '',
  7. `Rank` float NOT NULL DEFAULT '0',
  8. `DP` float DEFAULT NULL,
  9. `MP` int(5) DEFAULT NULL,
  10. `Skalpy` int(6) DEFAULT NULL,
  11. `Gry` int(3) NOT NULL DEFAULT '0',
  12. `RoznMP` int(5) DEFAULT NULL,
  13. PRIMARY KEY (`TID`)
  14. ) TYPE=MyISAM PACK_KEYS=0 COMMENT='zawiera miejsca osob w poszczeglnych turniejach'

gdzie TID - klucz
TurnID - numer rozegranego Turnieju
Miejsce - wiadomo miejsce zajete w turnieju przez zawodnika o PersonID (Name - jest tylko pomocnicze dla mnie bym wiedzial kto to jest - osob w bazie jest okolo 50 biggrin.gif)
Reszta pol to dane z turniejow
Kawalek danych w tabeli wyglada tak (zgonie z kolejnoscia podanych pol w tabeli:

Cytat
1 1  1  15 Petrus Jacek  100  3  1505  500  4  302
2  1  2  2  Jankowska Elżbieta  100  3  1448  500  4  100
3  1  3  40 Łukaszuk Anna    100  3  1225  500  4  10
4  1  4  25 Wiączkowski Grzegorz 100  2.5  1385  350  3  522
5  1  5  1  Fiszer Ewa    100  2  1295  400  4  72
6  1  6  13 Pawlic Przemysław  100  1.5  1111  250  3  153
7  1  7  26 Włodarczyk Robert  100  1.5  1088  250  3  40
8  1  8  39 Mazur Arnold    100  1  1157  300  4  -31
9  1  9  38 Wojtkowiak Anna  100  0.5  993  150  3  32
10 2  1  25 Wiączkowski Grzegorz 125  4  1850  650  5  148
11 2  2  15 Petrus Jacek    123  4  1736  650  5  204
12 2  3  35 Zięba Maciej    100  3  1813  550  5  242
13 2  4  37 Wrąbel Dariusz  100  3  1551  550  5  -78
14 2  5  4  Jankowski Eligiusz  100  2  1686  450  5  49
15 2  6  26 Włodarczyk Robert  105  2  1406  450  5  -178
16 2  7  2  Jankowska Elżbieta  100  1  1697  350  5  -17
17 2  8  1  Fiszer Ewa    100  1  1453  350  5  -370
18 3  1  8  Lewiński Jacek  100  5  1974  750  5  432
19 3  2  25 Wiączkowski Grzegorz 120  4  1773  650  5  356
20 3  3  15 Petrus Jacek    110  3  1806  550  5  144
21 3  4  1  Fiszer Ewa    100  3  1654  550  5  -120
22 3  5  35 Zięba Maciej    100  2  1697  450  5  60
23 3  6  26 Włodarczyk Robert  110  1  1410  350  5  -82
24 3  7  37 Wrąbel Dariusz  105  1  1377  350  5  -372


Zapytanie jakie nalezy wykonac to:
Wyszukaj w w/w tabeli wszystkie różne osoby wraz z ich ostatnia zmiana rankingu dla pierwszych trzech turniejow ktore sie odbyly
Np. Dla Wiaczkowskiego Grzegorza powinno zwrocic 19 wiersz wraz z rankingiem 120 ponieważ jet to jego ostatnie wystąpienie w turnieju
czyli:
19 3 2 25 Wiączkowski Grzegorz 120 4 1773 650 5 356

Moje zapytanie wyglada tak ale nie robi tego co chce co w nim zmienic?questionmark.gif
  1. SELECT DISTINCT Name, Rank, TurnID
  2. FROM `ranking` WHERE TurnID <=3 LIMIT 0, 30


Proszę o pomoc, bo w MySQL de facto siedze dopiero 2 tygodnie i jest to dla mnie problem nie do przeskoczenia
scanner
No i o co chodzi?
Aztech
Teraz juz jest pelna informacja - po prostu podczas wklejania przycielo mi kawalek posta biggrin.gif

Na razie wymyslilem cos takiego:

  1. SELECT DISTINCT Name, TurnID, Rank
  2. FROM `ranking` GROUP BY Name
  3. HAVING TurnID <=3
  4. LIMIT 0, 30


Ale wyswietla mi to tyllko pierwsze wystapienia a chcialbym aby znajdywalo ostatnie wystapienia

Próbowałem też zrobić to za pomocą dwóch zapytań - pierwsze zwracało mi listę ID osób, które wystąpiły aż do danego turnieju a potem w pętli znajdywałem wszystkie turnieje w których wystąpiła osoba o danym ID w odwrotnej kolejności.

1 ZAPYTANIE:
  1. SELECT DISTINCT PersonID FROM rnking WHERE TurnID <=3


2 ZAPYTANIE (w pętli)
  1. SELECT *
  2. FROM ranking HAVING PersonId = 25 AND TurnID <=3
  3. ORDER BY TID DESC


może ktoś zna efektywniejszy sposób??

Ale ten sposób ma jedną poważną wadę - nie sortuje mi wd rankingów - a na tym mi zależy
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.