[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Несколько COUNT в 1 запросе
Renden
С пятничкой! :)
Ребят, подскажите как можно сделать несколько COUNT запросов в 1.
надо узнать сколько всего сообщений было отправлено, получено, удалено.
3 раза сделать разные запросы можно, но хотелось бы понять как сделать все красиво)

SELECT COUNT(*) AS num0 FROM messages WHERE from_user_id='6' //отправлено
SELECT COUNT(*) AS num1 FROM messages WHERE to_user_id='6' and m_read='1' //получено
SELECT COUNT(*) AS num2 FROM messages WHERE to_user_id='6' and m_dell='1' //удалено

Можно ли обьединить в 1 и вывести просто $row['num0'] $row['num1'] $row['num2']?



Спустя 7 минут, 18 секунд (3.12.2010 - 11:24) vinnie написал(а):
попробуй перечислять через AND

Спустя 2 минуты, 30 секунд (3.12.2010 - 11:27) collapse написал(а):
Двигайтесь в сторону group

SELECT COUNT(*), `from_user_id`, `m_read` FROM `messages` WHERE `from_user_id`='6' GROUP BY `from_user_id`, `m_read`

Спустя 12 минут, 14 секунд (3.12.2010 - 11:39) Renden написал(а):
vinnie
Непонял, чем это поможет, запросы то разные.

collapse
Выводит неверно COUNT - 18 from_user_id - 1 m_read - 1 т.е последние 2 столбца это вывод значения а не колличества записей

Спустя 21 минута, 19 секунд (3.12.2010 - 12:00) collapse написал(а):
Конечно, так и должно быть.
Это значит что строк from_user_id = 1 m_read = 1 - 18 штук.
Несколько Count нельзя сразу сделать. Но можно посчитать количество для каждой группы и их потом обработать .

Спустя 9 минут, 8 секунд (3.12.2010 - 12:09) Renden написал(а):
collapse
Тогда невижу разницы между вашими запросами с group и моими, тк колличество запросов остаеться темже.
Почему нельзя, несколько селектов можно же сделать в 1 запросе, а каждый селект обозначить как AS .. разьве нет?

Спустя 10 минут, 41 секунда (3.12.2010 - 12:20) linker написал(а):
В данном вопросе на ум приходят пока только вложенные запросы.

Спустя 42 минуты, 20 секунд (3.12.2010 - 13:03) sergeiss написал(а):
Цитата (Renden @ 3.12.2010 - 12:17)
SELECT COUNT(*) AS num0 FROM messages WHERE from_user_id='6' //отправлено
SELECT COUNT(*) AS num1 FROM messages WHERE to_user_id='6'and m_read='1' //получено
SELECT COUNT(*) AS num2 FROM messages WHERE to_user_id='6' and m_dell='1' //удалено

Преобразуем в
select
(SELECT COUNT(*) FROM messages WHERE from_user_id='6') as num_sent,
(
SELECT COUNT(*) FROM messages WHERE to_user_id='6' and m_read='1') as num_received,
(
SELECT COUNT(*) FROM messages WHERE to_user_id='6' and m_dell='1') as num_deleted

Запускаем один этот запрос, на выходе забираем
$row['num_sent'], $row['num_received'], $row['num_deleted'].
Время выполнения будет практически такое же, как и суммы всех 3-х отдельных запросов, но работать будет несоизмеримо проще.

Спустя 34 минуты, 6 секунд (3.12.2010 - 13:37) Renden написал(а):
sergeiss
Вот, вот что я хотел, спасибо) Я же знал что как-то это монжно красиво сделать, а не плодить запросы в коде)

Спустя 4 минуты, 34 секунды (3.12.2010 - 13:41) sergeiss написал(а):
Цитата (Renden @ 3.12.2010 - 14:37)
Я же знал....

Наверное, правильнее будет сказать "я же чувствовал!" wink.gif

Спустя 40 минут, 7 секунд (3.12.2010 - 14:21) Renden написал(а):
sergeiss
ну да smile.gif А не подскажешь какой функцией mysql можно выбрать диапазон даты, если значение в базе datetime?
т.е значение в базе такого вида: 2010-11-03 10:49:32 и надо выбрать допустим все с 2010-11-03 по 2010-12-01, как?))

Спустя 26 минут, 22 секунды (3.12.2010 - 14:48) linker написал(а):
Делается это как обычно
...WHERE `date` >= '2010-11-03' AND `date` <= '2010-12-01'
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.