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

Форум MySQL

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

 

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

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

тема: Нужен мудреный запрос
 
 автор: Prihod   (15.08.2007 в 15:05)   письмо автору
 
 

Имеется таблица chat

REATE TABLE `chat` (
`id_chat` int(11) NOT NULL auto_increment,
`date_read` int(11) default '0',
`date_writ` int(11) default NULL,
`mes` text,
PRIMARY KEY (`id_chat`)
)

Необходимо составить такой SQL запрос что бы получить количество всего написанных сообщений (за это отвечает поле date_writ ) и количество не прочтенных сообщений (поле date_read ) т.е если сообщение прочтенное то полк date_read содержит дату прочтения каждого сообщения. Как получить эти два значения в одном запросе ?

   
 
 автор: Unkind   (15.08.2007 в 18:37)   письмо автору
 
   для: Prihod   (15.08.2007 в 15:05)
 

Я так и не понял, что Вы там хотите, но дату прочтения никакую хранить в таблице с сообщениями не надо. Это для каждого пользователя индивидуально. Что касается чатов, то, думаю, в данном случае будет достаточно хранить дату последнего обновления списка сообщений. Непрочтенные будут, естественно, те, которые имеют дату записи выше, чем дату последнего обновления страницы пользователем.

   
 
 автор: cheops   (16.08.2007 в 18:24)   письмо автору
 
   для: Prihod   (15.08.2007 в 15:05)
 

Нужно получить сумму всех значений в столбцах или требуется что-то другое?

   
 
 автор: Prihod   (16.08.2007 в 18:41)   письмо автору
 
   для: cheops   (16.08.2007 в 18:24)
 

Ситуация чуть изменилась и нужно уже следующее:
имеется таблица
CREATE TABLE `chat` (
`id_chat` int(11) NOT NULL auto_increment,
`date_read` int(11) NOT NULL default '0',
`date_writ` int(11) NOT NULL default '0',
`id_to` int(11) NOT NULL default '0',
`id_from` int(11) NOT NULL default '0',
`mes` text,
PRIMARY KEY (`id_chat`)
)
Необходимо подсчитать сколько всего сообщений у каждого пользователя т.е необходимо подсчитать сколько пользователь отправил и получил сообщений. Поле id_from –это кто отправил сообщение , а id_to –кому это сообщение отправлено

К примеру имеется 2 пользователя
1-й отпр. 2 сооб. 2-му
2-й отпр. 1 сооб. 1-му
Тогда для 1-го всего сообщений 3, и у второго 3

Как это сделать в одном запросе

   
 
 автор: Trianon   (16.08.2007 в 18:55)   письмо автору
 
   для: Prihod   (16.08.2007 в 18:41)
 


SELECT 
    users.id, snt, rcv
  FROM users 
    LEFT JOIN  (
        SELECT count(id_chat) AS snt 
          FROM chat  
          WHERE id_from =users.id
        ) AS ts
    LEFT JOIN  (
        SELECT count(id_chat) AS rcv 
          FROM chat  
          WHERE id_to =users.id
        ) AS tr
   ORDER BY user.nickname

   
 
 автор: Prihod   (16.08.2007 в 19:14)   письмо автору
 
   для: Trianon   (16.08.2007 в 18:55)
 

Я так понимаю что из таблицы users будут перебраны id всех юзеров ,
А как этот запрос можно модифицировать, что бы не перебирать всех пользователей из таблицы users, а брать только тех сообщения которых есть в таблицы chat .

   
 
 автор: Trianon   (16.08.2007 в 20:01)   письмо автору
 
   для: Prihod   (16.08.2007 в 19:14)
 

Вы хотите не выводить нули?
Тогда добавьте в хвосте (перед ORDER BY ) WHERE snt OR rcv;

Если нет порождающей таблицы - запрос сам собой развалится на два независимх.

   
Rambler's Top100
вверх

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