Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL 4.1+] Numerowanie wyniku zapytań, trochę zakręcone pytanie
Aztech
post
Post #1





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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??)(IMG:http://forum.php.pl/style_emoticons/default/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ć?(IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował Aztech 19.10.2006, 16:32:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Aztech
post
Post #3





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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


Ten post edytował Aztech 19.10.2006, 16:59:13
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Aztech
post
Post #5





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




hmmm, linka mowisz... a masz:
http://dev.mysql.com/doc/refman/5.0/en/index.html
(IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 19:35