Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Фильтр вывода MySQL [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: Создание диалогов
Мелкий Супермодератор
Отправлено: 13 Июня, 2014 - 17:19:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM messages, (
  2. SELECT max(message_id) AS message_id, IF (`author_id` = 10, `address_id`, `author_id`) AS user_id  FROM `messages` WHERE `author_id` = 10 OR `address_id` = 10
  3. GROUP BY user_id
  4. ) lastmessages USING(message_id)


Но я бы предпочёл id последнего сообщение в беседе хранить отдельно. Налету считать довольно дорого.


-----
PostgreSQL DBA
 
 Top
brown_dev
Отправлено: 19 Июня, 2014 - 01:53:41
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Мелкий пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM messages (
  2. SELECT max(message_id) AS message_id, IF (`author_id` = 10, `address_id`, `author_id`) AS user_id  FROM `messages` WHERE `author_id` = 10 OR `address_id` = 10
  3. GROUP BY user_id
  4. ) lastmessages USING(message_id)


CODE (htmlphp):
скопировать код в буфер обмена
  1. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( SELECT max(message_id) AS message_id, IF (`author_id` = 10, `address_id`, `aut' at line 1

(Отредактировано автором: 19 Июня, 2014 - 01:54:16)

 
 Top
Мелкий Супермодератор
Отправлено: 19 Июня, 2014 - 08:16:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Опечатка, запятую пропустил. Подправил своё предыдущее сообщение.


-----
PostgreSQL DBA
 
 Top
brown_dev
Отправлено: 19 Июня, 2014 - 15:00:31
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Мелкий пишет:
Опечатка, запятую пропустил. Подправил своё предыдущее сообщение.

CODE (htmlphp):
скопировать код в буфер обмена
  1. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING(message_id) LIMIT 0, 30' at line 4
 
 Top
Sail
Отправлено: 19 Июня, 2014 - 15:07:08
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Вместо той запятой, однако,
нужен Улыбка
 
 Top
brown_dev
Отправлено: 19 Июня, 2014 - 15:22:17
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Sail пишет:
Вместо той запятой, однако,
нужен Улыбка

Офигеть, спасибо вам большое, ребята! =) Я уже потерял всяческую надежду решить эту проблему в рамках запроса, но все-таки!
Сделал в итоге вот так
CODE (htmlphp):
скопировать код в буфер обмена
  1. SELECT * FROM messages JOIN (
  2. SELECT max(message_id) AS message_id, IF (`author_id` = 10, `address_id`, `author_id`) AS user_id  FROM `messages` WHERE `author_id` = 10 OR `address_id` = 10
  3. GROUP BY user_id
  4. ) lastmessages USING(message_id) ORDER BY `send_date` DESC

А можно как-то без AS user_id?
 
 Top
Мелкий Супермодератор
Отправлено: 19 Июня, 2014 - 15:34:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Sail пишет:
Вместо той запятой, однако,

Ох. У меня, конечно, сессия в разгаре, но чтобы даже со второй попытки не обратить внимание на отсутствие join'а?

brown_dev пишет:
А можно как-то без AS user_id?

В теории можно.
Да и на практике тоже, это поле дальше нигде не используется:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM messages JOIN (
  2. SELECT max(message_id) AS message_id  FROM `messages` WHERE `author_id` = 10 OR `address_id` = 10
  3. GROUP BY IF (`author_id` = 10, `address_id`, `author_id`)
  4. ) lastmessages USING(message_id) ORDER BY `send_date` DESC
  5. -- так, теперь-то все ключевые слова на своих местах? x_X


-----
PostgreSQL DBA
 
 Top
brown_dev
Отправлено: 19 Июня, 2014 - 15:41:27
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Мелкий пишет:
Sail пишет:
Вместо той запятой, однако,

Ох. У меня, конечно, сессия в разгаре, но чтобы даже со второй попытки не обратить внимание на отсутствие join'а?

brown_dev пишет:
А можно как-то без AS user_id?

В теории можно.
Да и на практике тоже, это поле дальше нигде не используется:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM messages JOIN (
  2. SELECT max(message_id) AS message_id  FROM `messages` WHERE `author_id` = 10 OR `address_id` = 10
  3. GROUP BY IF (`author_id` = 10, `address_id`, `author_id`)
  4. ) lastmessages USING(message_id) ORDER BY `send_date` DESC
  5. -- так, теперь-то все ключевые слова на своих местах? x_X

Я рано радовался, ID 10 дублируется что в address_id, так и author_id
(Добавление)
Хотя, подождите.
(Добавление)
В итоге получилось, спасибо еще раз всем!
Наверно не самое лучшее решение, но мне пришлось сделать некоторые проверки в коде, код скрипта:
PHP:
скопировать код в буфер обмена
  1. $page_title = 'Диалоги';
  2.         $formatex .=  "<div class='list-group'>";
  3.  
  4.         $q = paging("SELECT * FROM messages JOIN (SELECT max(message_id) AS message_id  FROM `messages` WHERE `author_id` = $userid OR `address_id` = $userid GROUP BY IF (`author_id` = $userid, `address_id`, `author_id`)) lastmessages USING(message_id) ORDER BY `send_date` DESC", $scriptname, '', 0);
  5. //запрос просто пстц
  6. if($q)
  7. {
  8.         while($r = mysql_fetch_array($q, MYSQL_ASSOC))
  9.         {
  10.  
  11.                 if($r['author_id'] == $userid)
  12.                 $manid = $r['address_id'];
  13.                 elseif($r['address_id'] == $userid)
  14.                 $manid = $r['author_id'];
  15.  
  16.                 $q2 = mysql_query("SELECT *  FROM `messages` WHERE `author_id` = $manid AND `address_id` = '$userid'");
  17.                 $msg_count = mysql_num_rows($q2);
  18.  
  19.                 $q2 = mysql_query("SELECT *  FROM `messages` WHERE `author_id` = $manid AND `address_id` = '$userid' AND `is_read` = 0");
  20.                 $msg_count_un = mysql_num_rows($q2);
  21.  
  22.                 $q2 = mysql_query("SELECT *  FROM `messages` WHERE `author_id` = '$userid' AND `address_id` = $manid");
  23.                 $msg_count_sent = mysql_num_rows($q2);
  24.  
  25.                
  26.  
  27.  
  28.                 if($msg_count_un) //если есть непроч сообщения то красный цвет
  29.                 $formatex .=  '<a href="/mail.php?id='.$manid.'" class="list-group-item"><font color="red">'.GetUserData($manid, 'login').' <span class="label label-danger">+'.$msg_count_un.'</span></font><span class="badge">'.$msg_count.'/'.$msg_count_sent.'</span></a>';
  30.                 else
  31.                 $formatex .=  "<a href='/mail.php?id=".$manid."' class='list-group-item'>".GetUserData($manid, 'login')." <span class='badge'>$msg_count/$msg_count_sent</span></a>";
  32.         }
  33.  
  34.         $formatex .=  '</div></br>'.$page_links;
  35. }
  36. else $formatex .=  '<span class="label label-default">У Вас нет диалогов</span>';
  37.  
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB