Помощник
Здравствуйте, гость ( Вход | Регистрация )
Вывод 2х значений за один sql проход |
Гость_shaman_* |
2009-07-19, 21:28
Сообщение
#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, в обширном смысле, плохо знаком! |
|
|
||
Next |
2009-07-19, 21:58
Сообщение
#2
|
|
Новичок Группа: Разработчики Сообщений: 76 Регистрация: 2008-12-13 Репутация: нет Всего: 8 |
Цитата Пробовал использовать UNION>? но не вышло Скопируй сюда свой запрос |
|
|
||
Гость_shaman_* |
2009-07-19, 22:38
Сообщение
#3
|
|
Гости |
Не, опечатка просто
и аналогично вывожу file_active='0' |
|
|
||
Next |
2009-07-19, 22:40
Сообщение
#4
|
|
Новичок Группа: Разработчики Сообщений: 76 Регистрация: 2008-12-13 Репутация: нет Всего: 8 |
Я имел ввиду запрос с объединением
|
|
|
||
Гость_shaman_* |
2009-07-19, 22:41
Сообщение
#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()"
ошибку не возвращает, но и результат тоже |
|
|
||
Next |
2009-07-19, 22:52
Сообщение
#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_* |
2009-07-19, 23:06
Сообщение
#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_* |
2009-07-20, 8:56
Сообщение
#8
|
|
Гости |
Уважаемый, нет больше идей ?
|
|
|
||
Гость_IMMEASU[RA]BILITY_* |
2009-07-20, 10:12
Сообщение
#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 |
|
|
||
Alexander |
2009-07-20, 18:18
Сообщение
#10
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
Используйте UNION ALL, тогда не нужно будет играться с "AS `arg`"
|
|
|
||
Гость_shaman_* |
2009-07-20, 19:49
Сообщение
#11
|
|
Гости |
Alexander, пример ?
|
|
|
||
Текстовая версия | 0.0402 сек. 11 запросов GZIP включен Сейчас: 2025-01-13, 19:05 |