Autor Zpráva
Enr1
Profil *
Ahoj, poraďte prosím, jak spojit následující dva dotazy co nejelegantněji do jednoho:

SELECT COUNT(id) FROM clanky WHERE aktivni=1
SELECT COUNT(id) FROM clanky WHERE aktivni=0

Zkrátka potřebuji dostat (uvedený příklad je teoretický) počet aktivních a neaktivních článků.

Děkuji.
juriad
Profil
SELECT COUNT(id), aktivni FROM clanky WHERE aktivni IN (1,0) GROUP BY aktivni

pokud jsou přípustné hodnoty aktivni jen 1 a 0, tak stačí jen
SELECT COUNT(id), aktivni FROM clanky GROUP BY aktivni
Enr1
Profil *
To mi nějak nefunguje.
Já to nakonec vyřešil takto, je to technicky správně? Nebo existuje něco, co by generovalo menší zátěž? Jedná se o stovky tisíc řádků.

SELECT COUNT(CASE WHEN aktivni=1 THEN 1 END) AS aktivni, COUNT(CASE WHEN aktivni=0 THEN 1 END) AS neaktivni FROM clanky
Keeehi
Profil
Enr1:
To co generuje menší zátěž bude nejspíše to, co napsal juriad (koukni se na explainy). Rozdíl je v tom, že jeho dotaz ti vrací výsledek ve dvou řádcích, kdežto tvůj zase ve dvou sloupcích.
Enr1
Profil *
A pls jak se postup příklad od juriad vypíše PHPkem?
Kajman
Profil
K řešení v [#2] - snad jen pokud jsou id vždy vyplněné (nemohou být null), tak bych dal count(*), pak by to pri indexu na sloupci aktivni mohlo být svižnější než s tím počítáním id.
peta
Profil
Enr1:
"vypíše PHPkem? " - forum php

$query = "SELECT COUNT(id) FROM clanky WHERE aktivni=0";
$result = mysql_query($query);
$row1 = mysql_fetch_row($result);
echo $row1[0];

$query = "SELECT COUNT(id), aktivni FROM clanky WHERE aktivni IN (1,0) GROUP BY aktivni";
$result = mysql_query($query);
$row1 = mysql_fetch_row($result);
$row2 = mysql_fetch_row($result);
echo $row1[0];
echo $row1[1];
echo $row2[0];
echo $row2[1];

$query = "SELECT COUNT(id), aktivni FROM clanky GROUP BY aktivni";
To je totez, jen vypise vsechny hodnoty pro aktivni, ne jen 0 nebo 1.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: