Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL 4.1+] Numerowanie wyniku zapytań
Forum PHP.pl > Forum > Bazy danych > MySQL
Aztech
Potrzebuję wyciągnąć z bazy dane w dosyć specyficzny sposób.
Mam listę osób zapisanych na turniej na żywo (część z nich dostanie promocyjne gadżety w zależności od tego kiedy się zapisali, część skorzystała z jakiejść promocji a część nie podczas zapisów).
Oczywiście podczas turnieju nastąpi weryfikacja listy obecności, zbieranie wpisowego itp itd, zatem chciałbym mieć listę posortowaną alfabetycznie, ale to znów się kłóci z wyszukiwaniem osób wg daty zapisu, aby znaleźć np pierwsze 30 osób których dotyczy ta promocja (promocji jest więcej, opcji sporo i wyszukiwania też).
To co chciałbym osiągnąć to numerowanie po kolei moich danych (ID się nie nadaje, bo część osób zrezygnowała i są dziury, ew ID może być ale z dziurami się źle wyszukuje i po drugie nie wiadomo, która osoba jest trzydziesta, która sześćdziesiąta itp).
Mam nadzieję, że nakreśliłem ogólnie koncepcję tego, co chcę otrzymać.
Zastanawiam się, czy to co chcę da się osiągnąć 1 zapytaniem (zapytaniami??)questionmark.gif
Przykładowe dane
ID | Username | Promocja 1 | Zamawiam coś 1 | Zamawiam coś 2 | Płacę za obiad
1 Staszek tak tak nie tak
4 Jasiu nie tak nie nie
5 Stefan nie tak tak tak
8 Krzysiu tak tak tak tak
9 Ryszard nie tak tak tak

W takiej formie będę sobie dane wyświetlał, ale chciałbym mieć te dane ponumerowanie
1,2,3,4,5... (od razu w zapyraniu SQL nie w php!) gdyż
miałbym drugą listę, gdzie osoby są posortowane alfabetycznie i przy każdej osobie znajduje się numerek (ten z 1,2,3,4,5...).
Wtedy mógłbym sobie poszukać nazwisko delikwenta, zobaczyć cyferkę i od razu odnaleźć ją na tej pierwszej liście
Da się tak zrobić?questionmark.gif
To bardzo łatwo pozwalałoby mi znaleźc pierwsze 30 osób zapisane na turniej, które się zgłosiły na żywo i zastosowanie dla nich promocji, czy też np znalezienie pierwszych 40 osób, które zamówiły sobie coś2 albo te peirwsze 35 osób, które dostaną obiad
nospor
Tu byl podobny problem:
Temat: ranking w SQL
No, moze nie podobny, ale technika rozwiązania moze ci sie przydac. Przeczytaj caly topic. Na koncu masz wykorzystanie jednego selecta, dla zasilenia drugiego
Aztech
Próbuje znaleźć w manualu składnie selecta z ifami ale bezskutecznie, wiesz może gdzie to jest?

EDIT: to co wymyśliłem, teraz się jeszcze nad sortowaniem męczę wg nazwiska
  1. SET @newID = 0;
  2. SELECT ID, person, IF (@newID <> ID, @newID:=@newID+1, @newID) newID FROM `stenrollment` WHERE 1 ORDER BY date
  3. LIMIT 200


EDIT2: w sumie nie było to trudne smile.gif
  1. SET @newID = 0;
  2. SELECT * FROM ( SELECT ID, person, IF (@newID <> ID, @newID:=@newID+1, @newID) newID FROM `stenrollment` WHERE 1 ORDER BY date
  3. LIMIT 200 ) AS t1 WHERE 1 ORDER BY t1.person ASC
nospor
if (@newID <> ID, @newID:=@newID+1, @newID)
zastąp tym:
@newID:=@newID+1

Akurat u Ciebie IF jest niepotrzebny.

Cytat
w sumie nie było to trudne
Sie wie winksmiley.jpg
Aztech
Dzięki wielkie za podpowiedź, jak się z tym uporać.
Ponowię jednak pytanie, mógłbyś podać link do manuala jakiegokolwiek miejsca, gdzie można poczytać o takich trikach jak IF, bo chciałbym się doszkolić.
Będę przenosił swoja stroną klubową na MySQL-a 4.1 by skorzystać z podzapytań oraz tych if'ów co mi pokazałeś, bo widzę, że wiele rzeczy które musiałem robić pętlami w php da się teraz bezpośrednio na bazie albo w widokach zrobić, będę niezmiernie wdzięczny!

Zdrawim
nospor
hmmm, linka mowisz... a masz:
http://dev.mysql.com/doc/refman/5.0/en/index.html
smile.gif
Zapoznaj sie ze strukturą tego manuala, a w przyszlosci szybko wszystko znajdziesz.

A IFy znajduja sie tu:
http://dev.mysql.com/doc/refman/5.0/en/con...-functions.html
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.