Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 2x Count 1 tabela 2 warunki
ast89
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
tehaha
post
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

  1. SELECT COUNT(id) AS num FROM users WHERE (UNIX_TIMESTAMP(last_access) + 180) > UNIX_TIMESTAMP()
  2. UNION
  3. SELECT COUNT(id) AS num FROM users WHERE (UNIX_TIMESTAMP(last_access) + 86400) > UNIX_TIMESTAMP()


Powinny zostać zwrócone 2 rekordy (Nie 2 kolumny, tylko 2 rekordy), więc musisz je odebrać przy pomocy pętli while
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(tehaha @ 24.04.2012, 21:33:08 ) *
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.
Go to the top of the page
+Quote Post
ast89
post
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
Go to the top of the page
+Quote Post
tehaha
post
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
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: 16.09.2025 - 17:23