CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Вывод 2х значений за один sql проход
Официальный форум Eleanor CMS » Для вебмастеров и владельцев сайтов » Комната программистов
Есть таблица файлов. Мне нужно вывести 2 значения: COUNT(id) активных файлов и COUNT(id) неактивных, соответственно!
Делаю я это 2мя запросами
SELECT COUNT(id) FROM files WHERУ active='1' и
SELECT COUNT(id) FROM files WHERУ active='0'

В результате имеем 2 запроса, как ни странно :))

ВОПРОС: 
Как я могу за один проход посчитать эти 2 значения?
PS Пробовал использовать UNION>? но не вышло. Я с синтаксисом и правилами SQL, в обширном смысле, плохо знаком!
Next
Цитата
Пробовал использовать UNION>? но не вышло
Случаем не из-за этого? :)
Цитата (shaman @ 19.7.2009, 22:28)
WHERУ

Скопируй сюда свой запрос
Не, опечатка просто

$sql = "SELECT COUNT(id) FROM {$prefix}_files WHERE file_active=&#39;1&#39; AND date<now()";

и аналогично вывожу file_active='0'
Next
Я имел ввиду запрос с объединением
$sql = "SELECT COUNT(id) FROM {$prefix}_files WHERE file_active='1' AND date<now() UNION SELECT COUNT(id) FROM {$prefix}_files WHERE file_active='0' AND date<now()"

ошибку не возвращает, но и результат тоже
Next
а как ты пытаешься получить результат?

SELECT COUNT(id) AS active FROM {$prefix}_files WHERE file_active='1' AND date<now() UNION SELECT COUNT(id) AS unactive FROM {$prefix}_files WHERE file_active='0' AND date<now()
Возвращает только одну переменную,
вот запрос полностью

Цитата
$sql = "SELECT COUNT(id) AS active FROM {$prefix}_files WHERE file_active='1' AND date<now() UNION SELECT COUNT(id) AS deactive FROM {$prefix}_files WHERE file_active='0' AND date<now()";
$r = $DB->query($sql);
list($all_act, $all_deact) = mysql_fetch_row($r);
Уважаемый, нет больше идей ?
UNION это когда происходит не совмещение столбцоав а добовлением строк!

тоесть если мы юзаем UNION то получаем дае строки с разными результатоми!

$sql = "
SELECT
COUNT(id) AS arg
FROM {$prefix}_files WHERE file_active='1' AND date<now()
UNION
SELECT
COUNT(id) AS arg
FROM {$prefix}_files WHERE file_active='0' AND date<now()
";

$r = $DB->query($sql);
#терь юзаем не просто лист а c while потому как при UNION нельзя получить в одной строке!

while(list($arg)=mysql_fetch_row($r)){
if(!$all_act)
$all_act=$arg;
else
$all_deact=$arg;
}

вот и получили $all_act, $all_deact
Alexander
Используйте UNION ALL, тогда не нужно будет играться с "AS `arg`"
Alexander, пример ?
Alexander
shaman, в девятом посте замени UNION на UNION ALL
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.