Помощник
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Гость_shaman_* |
![]()
Сообщение
#1
|
|
Гости ![]() |
Есть таблица файлов. Мне нужно вывести 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, в обширном смысле, плохо знаком! |
|
|
||
![]() |
![]()
Сообщение
#2
|
|
Новичок![]() Группа: Разработчики Сообщений: 76 Регистрация: 2008-12-13 Репутация: ![]() ![]() Всего: 8 ![]() |
Цитата Пробовал использовать UNION>? но не вышло ![]() Скопируй сюда свой запрос |
|
|
||
Гость_shaman_* |
![]()
Сообщение
#3
|
|
Гости ![]() |
Не, опечатка просто
и аналогично вывожу file_active='0' |
|
|
||
![]() |
![]()
Сообщение
#4
|
|
Новичок![]() Группа: Разработчики Сообщений: 76 Регистрация: 2008-12-13 Репутация: ![]() ![]() Всего: 8 ![]() |
Я имел ввиду запрос с объединением
|
|
|
||
Гость_shaman_* |
![]()
Сообщение
#5
|
|
Гости ![]() |
$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()"
ошибку не возвращает, но и результат тоже |
|
|
||
![]() |
![]()
Сообщение
#6
|
|
Новичок![]() Группа: Разработчики Сообщений: 76 Регистрация: 2008-12-13 Репутация: ![]() ![]() Всего: 8 ![]() |
а как ты пытаешься получить результат?
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() Сообщение отредактировал Next - 2009-07-19, 22:53 |
|
|
||
Гость_shaman_* |
![]()
Сообщение
#7
|
|
Гости ![]() |
Возвращает только одну переменную,
вот запрос полностью Цитата $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); Сообщение отредактировал shaman - 2009-07-19, 23:08 |
|
|
||
Гость_shaman_* |
![]()
Сообщение
#8
|
|
Гости ![]() |
Уважаемый, нет больше идей ?
|
|
|
||
Гость_IMMEASU[RA]BILITY_* |
![]()
Сообщение
#9
|
|
Гости ![]() |
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 |
|
|
||
![]() |
![]()
Сообщение
#10
|
|
Eleanor developer![]() Группа: Администраторы Сообщений: 5 261 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: ![]() ![]() Всего: 67 ![]() |
Используйте UNION ALL, тогда не нужно будет играться с "AS `arg`"
|
|
|
||
Гость_shaman_* |
![]()
Сообщение
#11
|
|
Гости ![]() |
Alexander, пример ?
|
|
|
||
![]() ![]() |
![]() |
Текстовая версия | ![]() ![]() ![]() ![]() |