![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 2 Dołączył: 26.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam, próbuję wyciagnąć z bazy (1 tabeli) 2 wartości Count dla 2 warunków złączając to w 1 zapytanie.
Wymyśliłem coś takiego: Kod SELECT COUNT(id) as three FROM users WHERE (UNIX_TIMESTAMP(last_access) + 180) > UNIX_TIMESTAMP() UNION SELECT COUNT(id) day FROM users WHERE (UNIX_TIMESTAMP(last_access) + 86400) > UNIX_TIMESTAMP() Lecz zwraca wartość tylko z 1 counta - przy wykonaniu przez php, przy wykonaniu przez Phpmyadmin jako SQL działa poprawnie, natomiast druga wersja Kod SELECT (SELECT COUNT(id) FROM users WHERE (UNIX_TIMESTAMP(last_access) + 180) > UNIX_TIMESTAMP() ) as mins, (SELECT COUNT(id) FROM users WHERE (UNIX_TIMESTAMP(last_access) + 86400) > UNIX_TIMESTAMP() ) as day LIMIT 1; Zwraca obie potrzebne przeze mnie wartości, ale dosyć wolno się wykonuje. Ma ktoś jakieś inne propozycje? Ten post edytował ast89 24.04.2012, 20:27:48 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
ta opcja z UNION powinna działać, tylko alias dla COUNT musisz dać taki sam, czyli np
Powinny zostać zwrócone 2 rekordy (Nie 2 kolumny, tylko 2 rekordy), więc musisz je odebrać przy pomocy pętli while |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
ta opcja z UNION powinna działać, tylko alias dla COUNT musisz dać taki sam Owszem ta opcja powinna działać nawet w miarę szybko, jednak nie nie ma potrzeby nadawania identycznych aliasów dla selekcjonowanych wartości. Domyślnie nazwą kolumny jest ta, którą wybieramy w pierwszym zapytaniu. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 2 Dołączył: 26.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wciąż nie działa:
[20] => 0.054796 [SELECT COUNT(id) AS num FROM users WHERE (UNIX_TIMESTAMP(last_access) + 180) > UNIX_TIMESTAMP() UNION SELECT COUNT(id) AS num FROM users WHERE (UNIX_TIMESTAMP(last_access) + 86400) > UNIX_TIMESTAMP()] czas generowania zapytania, a w wyniku: array(1) { ["num"]=> string(3) "114" } /// Edit - działa, nie doczytałem o while. Kod while($row = mysql_fetch_assoc($res)){
$online[] = $row['num']; } Ten post edytował ast89 24.04.2012, 21:01:15 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
pokaż kod php
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.09.2025 - 17:23 |