Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: получить количество элементов 1 запросом
 
 автор: skinny   (08.06.2011 в 23:54)   письмо автору
 
 

Нужно сделать функцию отображения количества сообщений - общее/непрочитанные
поля в таблице
`email` `red`

нужно узнать сколько red =1 и сколько red=0 в записях где email = 'adres1@server.com'

крутил вертел по всякому - не осилил

  Ответить  
 
 автор: Ильдар   (09.06.2011 в 00:15)   письмо автору
 
   для: skinny   (08.06.2011 в 23:54)
 


SELECT COUNT(*) AS kolichestvo FROM table WHERE red = 0 AND email = 'adres1@server.com'
это для отображения прочтенных как понимаю

SELECT COUNT(*) kolichestvo FROM table WHERE red = 1 AND email = 'adres1@server.com'
непрочтенных


не забудь проставить индексы к стобцам red и email

  Ответить  
 
 автор: skinny   (09.06.2011 в 00:20)   письмо автору
 
   для: Ильдар   (09.06.2011 в 00:15)
 

да собственно задача была как выдтащить их 1 запросом
2 я и сам умею :)
это даже чисто для теории интересно.
и тут походу немного изменилось условие
я с начала просто не понял
нужно отобразить количество всех сообщений пользователя и из них сколько непрочтённых
вопщем там где red =0 такие ненужны, нужны просто

SELECT COUNT(*) AS kolichestvo FROM table WHERE email = 'adres1@server.com'
это для отображения прочтенных как понимаю

SELECT COUNT(*) kolichestvo FROM table WHERE red = 1 AND email = 'adres1@server.com'
непрочтенных 

  Ответить  
 
 автор: Ильдар   (09.06.2011 в 00:23)   письмо автору
 
   для: Ильдар   (09.06.2011 в 00:15)
 


SELECT (SELECT COUNT(*)  FROM table WHERE red = 0 AND email = 'adres1@server.com') AS prochitano
(SELECT COUNT(*)  FROM table WHERE red = 1 AND email = 'adres1@server.com') AS neprochitano 

  Ответить  
 
 автор: Ильдар   (09.06.2011 в 00:25)   письмо автору
 
   для: Ильдар   (09.06.2011 в 00:23)
 

еще можно с помощью LEFT JOIN

  Ответить  
 
 автор: skinny   (09.06.2011 в 00:29)   письмо автору
 
   для: Ильдар   (09.06.2011 в 00:25)
 

интересно как теоретически такой запрос будет выполняться по времени

SELECT (SELECT COUNT(*)  FROM table WHERE red = 0 AND email = 'adres1@server.com') AS prochitano
(SELECT COUNT(*)  FROM table WHERE red = 1 AND email = 'adres1@server.com') AS neprochitano  


быстрее или медленнее чем те 2 ?
ща потестю

  Ответить  
 
 автор: skinny   (09.06.2011 в 00:39)   письмо автору
 
   для: skinny   (09.06.2011 в 00:29)
 

если работать с 1 записью то почти одинаково.
подожду заполнения базы и если что перепишу.

  Ответить  
 
 автор: Ильдар   (09.06.2011 в 11:54)   письмо автору
 
   для: skinny   (09.06.2011 в 00:39)
 

Одинаково будет, потому что запрос в итоге один и тот же - двойной, просто выаолняется одним запросом.

  Ответить  
 
 автор: Ильдар   (09.06.2011 в 13:31)   письмо автору
 
   для: Ильдар   (09.06.2011 в 11:54)
 

а вообще, вот идеальный вариант для тебя я думаю
SELECT COUNT(IF(red=0,news_public,NULL)) AS yes, COUNT(IF(red=1,news_public,NULL)) AS no FROM table WHERE email = 'adres1@server.com'

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования