X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Вывод 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 @ 19.7.2009, 22:28)
WHERУ

Скопируй сюда свой запрос
Перейти в начало страницы
+Цитировать сообщение
Гость_shaman_*
сообщение 2009-07-19, 22:38
Сообщение #3



Гости





Не, опечатка просто

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

и аналогично вывожу 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 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Используйте UNION ALL, тогда не нужно будет играться с "AS `arg`"
Перейти в начало страницы
+Цитировать сообщение
Гость_shaman_*
сообщение 2009-07-20, 19:49
Сообщение #11



Гости





Alexander, пример ?
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-07-20, 19:58
Сообщение #12
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


shaman, в девятом посте замени UNION на UNION ALL
Перейти в начало страницы
+Цитировать сообщение

Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0447 сек.    11 запросов    GZIP включен    Сейчас: 2020-05-25, 13:19