![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam 2 tabelę :
1) xn_users 2) xn_ranks Teraz chcę otrzymać takie coś: Wybierz (POLA) z tabel xn_users, xn_ranks, takie, że xn_ranks. ->pole xn_user.id równe jest 5 ORAZ ->Jeżeli xn_users.rank_id>0 Pobierz xn_ranks.id=xn_users.rank_id W Przeciwnym Razie pobierz taką wartość, że rank_min>xn_users.points (pierwsza wartość, która jest większa równa od wymaganej ilości punktów) Napisałem pytanie do bazy:
Niestety, jak się domyślacie nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . Pozdrawiam Ten post edytował Spirit86 7.11.2005, 19:01:34 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
witam ...
zwraca błąd (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) if nie może występować w where ... rozbij to na logiczne zdanie ( tylko OR XOR i AND) ... jakoś tak (totalnie z palca ale taka zasada jest ...
na pewno musisz przerobić pozdrawiam |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 1.12.2003 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
na szybko, ale powinno działać, chyba że nie zrozumiałem do końca tego co chciałeś osiągnąć. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
niestety nie działa, tzn. jak użytkownik ma więcej punktów, niż najwyższe ranga , wtedy zapytanie nie zwraca ŻADNEGO rezultatu, a ja chciałbym, żeby zwracało wszystko, a pole rank_name dało puste.
Ten post edytował Spirit86 8.11.2005, 16:37:32 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 1.12.2003 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Czy dla innych przypadków zwraca Ci poprawne dane (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Z tego co zroumiałem w kwesti pkt. usera to chyba potrzebna Ci obsługa trzeciego warunku. Możesz dodać koleją unie, która by ten warunek obsługiwała. Ciekawi mnie jeszcze jak wyglada sprawa z wydajnością.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
ech, tylko problem w tym, że to ma być przyjazne dla serwera, czyli pytania mają go obciążać w jak najmniejszym stopniu, tu liczy się każdy milisekunda (jak w reklamie MobilOne (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ). Z resztą, z tego co zauważyłem działa poprawnie, no ale czas wykonywania pytania: 0.012 to chyba z deczka duży, szczególnie, jak jest więcej danych.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 1.12.2003 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Jak najbardziej się zgodze. Jednak to zapytanie wcale takie obciążające nie jest, mógłbyś spróbowac dodac indeks na kolumnie rang_id w tabeli z userami, moglo by to przyspieszyc sprawe, jesli rzeczywiscie jest on az tak wolna.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
hehe. a zmodyfikował byś to pytanie, tak, aby działało ? Nie mam bladego pojęcia na czym polega union, a potrzebuję tego pytania najszybciej jak się da:).
Pozdrawiam |
|
|
![]()
Post
#9
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Praktyczna rada: czekasz po kilka godzin na odpowiedz -- w tym samym czasie zdazyl bys poznac UNIONa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat(dr_bonzo @ 2005-11-08 21:11:18) Praktyczna rada: czekasz po kilka godzin na odpowiedz -- w tym samym czasie zdazyl bys poznac UNIONa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) w międzyczasie robię rysunek techniczny (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 1.12.2003 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
UNION pozwala ci łączyc wyniki kilku zapytań. Aby można było łączyc poszczególne zapytania, musi zby spełniony warunek : ilosc i typy pól w sekcji select musi byc identyczna we wszystkich zapytania laczonych unią. Proste i szybkie.
Co do Twojego przypadku to kwestia rozchodzi się o stworznie dodatkowego zapytania, które obsługuje kolejna grupe rekordow ( gdzie punktacja > rangi ). Jesli sobie nie poradzisz to może jutro jak bede mial chwile to wrzuce ta 3 unie. btw: dodales indeks, pomoglo (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Ten post edytował Synaps 9.11.2005, 00:55:35 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 607 Pomógł: 23 Dołączył: 8.09.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
ech, zauważyłem, że jeśli uzytkownik ma 0 punktów, wtedy Zwraza wiele rekordów.
ykonanie zapytania trwało 0.0190 sekund Dzięki za wytłumaczenie zasady działania Union. Wiesz, zastanawiam się, czy nie dało by się użyć czegoś a'la Switch w php. Tzn., coś podobnego do:
tylko nie mogę doszukać się w manualu switcha, ech kiepsko z tym moim angielskim |
|
|
![]()
Post
#13
|
|
Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Szukaj pod haslem CASE.. jest cos takiego w MySQL'u. Po przyklady mozesz zajrzec do przyklejonego topicu w tym dziale.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:25 |