Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 2x Count 1 tabela 2 warunki
Forum PHP.pl > Forum > PHP
ast89
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?
tehaha
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
mortus
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.
ast89
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'];
}
tehaha
pokaż kod php
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.