SELECT COUNT, 2x WHERE? |
SELECT COUNT, 2x WHERE? |
19.07.2013, 20:58:36
Post
#1
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 16 Dołączył: 25.05.2004 Skąd: Gorzów Wlkp. Ostrzeżenie: (0%) |
Mam dwa zapytania:
Da się wyjąć te county w jednym zapytaniu? Ten post edytował fiszol 19.07.2013, 20:59:52 -------------------- \o/
|
|
|
20.07.2013, 00:00:12
Post
#2
|
|
Grupa: Zarejestrowani Postów: 109 Pomógł: 25 Dołączył: 10.08.2009 Ostrzeżenie: (0%) |
|
|
|
20.07.2013, 03:52:30
Post
#3
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 16 Dołączył: 25.05.2004 Skąd: Gorzów Wlkp. Ostrzeżenie: (0%) |
Dzięki, to już coś, ale wynik zapytania jest inny niż oczekuje, wygląda tak:
Kod loot 5 7 Wynik jakiego potrzebuję to: Kod loot spent 5 7 Jak to osiągnąć? //edzia. Wygooglowałem na stacku:
Ten post edytował fiszol 20.07.2013, 04:44:59 -------------------- \o/
|
|
|
20.07.2013, 09:18:27
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) |
To jest zabójstwo dla serwera. Zwłaszcza dla "rewelacyjnej" bazy, jaką jest MySQL.
Duuuuuuuuużo lepiej jest zrobić to tak:
|
|
|
20.07.2013, 13:03:49
Post
#5
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 16 Dołączył: 25.05.2004 Skąd: Gorzów Wlkp. Ostrzeżenie: (0%) |
Wsadziłem w pętle, usiadłem ze stoperem i:
Kod SELECT (SELECT COUNT(1) FROM smf_mpc_dkplog WHERE real_name = 'Rhage' AND item_id != 0) AS items, (SELECT COUNT(1) FROM smf_mpc_dkplog WHERE mod_value < 0 AND item_id = 0 AND real_name = 'Rhage') AS spent launch #1: 0.04595 sec. launch #2: 0.04603 sec. launch #3: 0.04557 sec. launch #4: 0.04691 sec. launch #5: 0.04758 sec. launch #6: 0.04713 sec. launch #7: 0.04742 sec. launch #8: 0.04653 sec. launch #9: 0.04657 sec. launch #10: 0.04807 sec. total: 0.46775 sec. SELECT COUNT(CASE WHEN item_id != 0 THEN item_id END) AS loot, COUNT(CASE WHEN item_id = 0 AND mod_value < 0 THEN item_id END) AS spent FROM smf_mpc_dkplog WHERE real_name = 'Rhage' launch #1: 0.04780 sec. launch #2: 0.04636 sec. launch #3: 0.04799 sec. launch #4: 0.04681 sec. launch #5: 0.04723 sec. launch #6: 0.04555 sec. launch #7: 0.04630 sec. launch #8: 0.04750 sec. launch #9: 0.04891 sec. launch #10: 0.04553 sec. total: 0.46997 sec. Jak na moje oko, drugie zapytanie jest ciut wolniejsze. Różnica zresztą jest taka, że ktoś musiałby mieć atomowe poczucie czasu, żeby to odczuć. Puszczałem po 1000 zapytań w 10 rzutach. Podczas normalnego użytkowania skrypt będzie wykonwał jedno zapytanie na jedno odwołanie strony. Samych odwołań nie będzie dużo (40-paru użytkowników). -------------------- \o/
|
|
|
20.07.2013, 13:26:40
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) |
Stoperem w pętli to ty se możesz mierzyć... Widać, że nie masz pojęcia jak działają bazy danych...
Ale skoro nie wierzysz mi, że jest wolniejsze, to cóż, twoja sprawa... |
|
|
20.07.2013, 14:12:21
Post
#7
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 16 Dołączył: 25.05.2004 Skąd: Gorzów Wlkp. Ostrzeżenie: (0%) |
Nie powiedziałem, że nie wierzę. Zmierzyłem, jak potrafię. Teraz jeszcze podglądłem sobie obciążenie na procesorze, drugie zapytanie w szczytowym momencie ~2-3% mniej. Biorąc pod uwagę "skalę projektu" i mozlwiości dzisiejszych serwerów, różnice zarówno w czasie i obciązeniu są śmieszne, nie istotne w tym konkretnym przypadku.
-------------------- \o/
|
|
|
7.11.2013, 13:13:19
Post
#8
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 5.11.2013 Ostrzeżenie: (0%) |
Witam serdecznie,
posiadam problem, z którym niestety nie poradziłem sobie sam. Z internetu tak jak Kolega Fiszol wygooglowałem połowiczne rozwiązanie prezentacji zapytania jakie mnie interesuje. W sumie to rozwiązań mojego problemu może być dwa, ale od poczatku. Opcja rozwiązania nr1: Moje zapytanie SQL to:
Które jest oczywiście podobne do Kolegi Fiszol'a. Wynikiem zapytania jest: Kod Zdanych Oblanych 6 2 Problem w tym, że chciałbym mieć informacje z podziałem na nazwiska ludzi biorących udział w testach. Czyli np: Kod Człek Zdanych Oblanych Kowalski 3 0 Nowak 0 1 Iksiński 3 1 Tego niestety nie potrafię zrobić. Wynik jaki dostaje po swoich kombinacjach to: Kod Człek Zdanych Oblanych Kowalski 6 2 Nowak 6 2 Iksiński 6 2 a zapytanie to:
Opcja rozwiązania nr2: Skoro posiadam liczbę testów danego człowieka, wystarczy, że wyciągnę ilość albo zdanych albo oblanych i odejmę ją od całości, w ten sposób w PHP już sobie spokojnie policze, ale problem jest taki, że nie wyświtla mi wartości zerowej. Czyli korzystając z kodu:
Wyświetli mi tylko dwóch Panów z przykładu powyżej - i nici z odejmowania.. Pomocy Pozdrawiam, Doldox Ten post edytował Doldox 7.11.2013, 13:17:10 |
|
|
7.11.2013, 15:12:55
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) |
|
|
|
7.11.2013, 15:31:10
Post
#10
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 5.11.2013 Ostrzeżenie: (0%) |
W sumie nie wiem dlaczego odejmowane są te wartości od siebie, ale zamieniłem znak "-" na "," i wyświetla mi dokładnie to co chciałem w opcji nr 1 z mojego porzedniego posta co prowadzi mnie to rozwiązania problemu, dziękuję bardzo! Piwo dla Ciebie!
Dzięki temu powyżej mogę teraz użyc obu opcji rozwiązania w zależności od potrzeby. I na przyszło oczywiście przyjrze się opcji Case when Pozdrawiam, Doldox Ten post edytował Doldox 7.11.2013, 15:31:33 |
|
|
Wersja Lo-Fi | Aktualny czas: 6.06.2024 - 17:54 |