Ребят, подскажите как можно сделать несколько 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 столбца это вывод значения а не колличества записей
Непонял, чем это поможет, запросы то разные.
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 нельзя сразу сделать. Но можно посчитать количество для каждой группы и их потом обработать .
Это значит что строк from_user_id = 1 m_read = 1 - 18 штук.
Несколько Count нельзя сразу сделать. Но можно посчитать количество для каждой группы и их потом обработать .
Спустя 9 минут, 8 секунд (3.12.2010 - 12:09) Renden написал(а):
collapse
Тогда невижу разницы между вашими запросами с group и моими, тк колличество запросов остаеться темже.
Почему нельзя, несколько селектов можно же сделать в 1 запросе, а каждый селект обозначить как AS .. разьве нет?
Тогда невижу разницы между вашими запросами с 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) |
Я же знал.... |
Наверное, правильнее будет сказать "я же чувствовал!"
Спустя 40 минут, 7 секунд (3.12.2010 - 14:21) Renden написал(а):
sergeiss
ну да А не подскажешь какой функцией mysql можно выбрать диапазон даты, если значение в базе datetime?
т.е значение в базе такого вида: 2010-11-03 10:49:32 и надо выбрать допустим все с 2010-11-03 по 2010-12-01, как?))
ну да А не подскажешь какой функцией 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'