![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 203 Pomógł: 6 Dołączył: 11.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Dziś nastał mnie wyjątkowo prosty problem, możliwe, że lekkie zaćmienie umysłu. Mam stworzyć statystyki transakcji. Ile użytkownik wykonał transakcji, ile wysłał i ile otrzymał. Stworzyłem to, ale w 3 zapytaniach, co jest wg. mnie zupełnie nieoptymalne. Czy da się to inaczej obejść? Chciałbym zamknąć to w jednym zapytaniu, jeżeli to w ogóle możliwe. Pozdrawiam, Largo |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Pokaż co masz, to spróbujemy zoptymalizować...
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 203 Pomógł: 6 Dołączył: 11.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jakieś nowości? Da się z tym coś zrobić? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Twoje zapytania to:
Niestety masz różne warunki, dla różnych pól, zatem w jednym zapytaniu tego łatwo nie będzie. Zastanawiają mnie 2 ostatnie zapytania... Możesz spróbować z UNION
Lub z podzapytaniami
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 203 Pomógł: 6 Dołączył: 11.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witaj,
Ostatnie rozwiązanie pomogło! Z logicznego punktu widzenia optymalizacji jako takiej nie ma, bo silnik pokazuje, że zapytań jest o 2 mniej, ale są one wykonywane defacto w jednym. A czemu warunki takie muszą być? Podliczam ilość wszystkich transakcji gdzie brałem udział, a mogę być zarówno wysyłającym jak i odbiorcą, a ostatnie dwa to obliczenia ile wysłałem i ile odebrałem, biorąc pod uwagę transakcje systemowe. Pozdrawiam, Largo |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
a ten warunej jest dobry?
WHERE `recipient_id`=$uid OR type = 1; podaj wszystko co odebral uzytkownik o ID=5 lub podaj wszystkich co mieli type=1 nie wiem co oznacza u Ciebie TYPE=1 ale chyba powinno byc AND type=1 Ten post edytował maly_swd 7.11.2009, 14:01:51 -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 203 Pomógł: 6 Dołączył: 11.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
a ten warunej jest dobry? WHERE `recipient_id`=$uid OR type = 1; podaj wszystko co odebral uzytkownik o ID=5 lub podaj wszystkich co mieli type=1 nie wiem co oznacza u Ciebie TYPE=1 ale chyba powinno byc AND type=1 sender_id - ID Osoby, która wysyła kasę. recipient_id - ID Osoby, która ją otrzymuję. type - lista opcji systemowych, zostanie zamieniona na flagę is_system Nie mogę dać jednego ID, bo nie zawsze jestem wysyłającym lub odbiorcą, takie podejście nic nie da. Na dodatek przy transakcjach systemowych nie podaję informacji o odbiorcy i nadaję flagę na 1, wtedy w ogóle tego nie policzy jako transakcję. Pozdrawiam, Largo |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
jak na moje oko to dalej to nielogiczne;)
powiedz mi jaki wynik dostaniesz: SELECT SUM( `amount` ) FROM `fg_transactions` WHERE `recipient_id`=5 OR type = 1 a jaki przy SELECT SUM( `amount` ) FROM `fg_transactions` WHERE `recipient_id`=5 AND type = 1 -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 18:48 |