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 :: Поиск уникальных значений из нескольких столюцов [2]

 PHP.SU

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


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

> Без описания
RickMan
Отправлено: 18 Сентября, 2014 - 14:05:45
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


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




Ну пример того, какой массиы должен получитсья в конце, и чтобы не пришлось по нему пробегаться еще раз в php. Думаю проблема решаемая на уровне запроса.
 
 Top
ksedin
Отправлено: 18 Сентября, 2014 - 14:48:32
Post Id


Гость


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


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




RickMan пишет:
Ну пример того, какой массиы должен получитсья в конце, и чтобы не пришлось по нему пробегаться еще раз в php. Думаю проблема решаемая на уровне запроса.


Блин, в голове каша... Вроде все проблемы уже решились) Лучше сейчас реализовать попробую, так легче все понять)
(Добавление)
RickMan пишет:
Ну пример того, какой массиы должен получитсья в конце, и чтобы не пришлось по нему пробегаться еще раз в php. Думаю проблема решаемая на уровне запроса.


Нашел.
Таблица:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. user1 | user2
  3. 1          2
  4. 2          1
  5. 2          1
  6. 1          2
  7.  


Нужно, чтоб только одна строка из них отображалась
 
 Top
RickMan
Отправлено: 18 Сентября, 2014 - 16:01:20
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


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




А какая именно? Запрос выдал:
Цитата:
1 2
2 1

Почему именно одна? И какая одна?
 
 Top
ksedin
Отправлено: 18 Сентября, 2014 - 16:14:14
Post Id


Гость


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


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




RickMan пишет:
А какая именно? Запрос выдал:
Цитата:
1 2
2 1

Почему именно одна? И какая одна?


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


В этом случае снчачала пользователь с id 2 шлет сообщение пользователю с id 1, потом пользователь с id 1 шлет сообщение пользователю с id 2.
По сути, фигурируют лишь два пользователя и мне нужна только одна запись та, у которой время отправки позже, но это просто, главное, чтоб отловить лишь одну запись
 
 Top
RickMan
Отправлено: 18 Сентября, 2014 - 16:17:04
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


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




CODE (SQL):
скопировать код в буфер обмена
  1. ... ORDER BY id DESC LIMIT 1;
- если нужно последнее из вот того что получилось то просто добавь это..
 
 Top
ksedin
Отправлено: 18 Сентября, 2014 - 16:27:34
Post Id


Гость


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


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




RickMan пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. ... ORDER BY id DESC LIMIT 1;
- если нужно последнее из вот того что получилось то просто добавь это..


Нет, мне нужно все, но по одному
 
 Top
Sail
Отправлено: 18 Сентября, 2014 - 16:55:48
Post Id



Участник


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


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




ksedin пишет:
На одной странице мне нужно вывести все диалоги, то есть ники тех, с кем обался пользователь

Так ники, или диалоги?!
В итоге на странице должны быть все последние сообщения, обращенные "мне" (одному пользователю с id === user_id от разных пользователей с id === user2_id)?
Или все последние сообщения, обращенные всем пользователям?
А табличка из первоначального поста точно содержит лишь два поля и просто фиксирует факт наличия сообщения от user2_id к user_id?!
 
 Top
ksedin
Отправлено: 18 Сентября, 2014 - 17:45:21
Post Id


Гость


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


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




Sail пишет:

Так ники, или диалоги?!
В итоге на странице должны быть все последние сообщения, обращенные "мне" (одному пользователю с id === user_id от разных пользователей с id === user2_id)?
Или все последние сообщения, обращенные всем пользователям?
А табличка из первоначального поста точно содержит лишь два поля и просто фиксирует факт наличия сообщения от user2_id к user_id?!


Мне нужно, как в ВК, ники. Выведу сам, мне нужно лишь айди выловить.
Разумеется, что таблице содержит больше значений, просто убрал воду и оставил только проблему. Модель таблицы вот:
PHP:
скопировать код в буфер обмена
  1. class Mail extends \Phalcon\Mvc\Model
  2. {
  3.     public $id;
  4.    
  5.     public $sender_user_id;
  6.    
  7.     public $recipient_user_id;
  8.  
  9.     public $text_message;
  10.  
  11.     public $time;
  12. }
 
 Top
Panoptik
Отправлено: 18 Сентября, 2014 - 18:09:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




ну с диалогами тут есть несколько ситуаций
1) вам нужно отобразить список диалогов для конкретного пользователя (того кто сейчас авторизирирован)
2) нужно отобразить сообщения по конкретному диалогу для конкретного пользователя

мне в голову приходят решения с юнионами джоинами и групировками, так что задачка действительно нетривиальная

для вывода списков диалогов у меня было примерно такое решение
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.             IF(senderUserId = {$user->id},receiverUserId,senderUserId) dialogUserId, `text`,
  3.             MAX(createdAt) createdAt, isRead
  4.           FROM message
  5.             WHERE (senderUserId = {$user->id} OR receiverUserId = {$user->id})
  6.             GROUP BY dialogUserId
  7.             ORDER BY createdAt DESC
  8.             LIMIT 10


-----
Just do it
 
 Top
ksedin
Отправлено: 18 Сентября, 2014 - 18:30:56
Post Id


Гость


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


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




Panoptik пишет:
ну с диалогами тут есть несколько ситуаций
1) вам нужно отобразить список диалогов для конкретного пользователя (того кто сейчас авторизирирован)
2) нужно отобразить сообщения по конкретному диалогу для конкретного пользователя

мне в голову приходят решения с юнионами джоинами и групировками, так что задачка действительно нетривиальная

для вывода списков диалогов у меня было примерно такое решение
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT
  2.             IF(senderUserId = {$user->id},receiverUserId,senderUserId) dialogUserId, `text`,
  3.             MAX(createdAt) createdAt, isRead
  4.           FROM message
  5.             WHERE (senderUserId = {$user->id} OR receiverUserId = {$user->id})
  6.             GROUP BY dialogUserId
  7.             ORDER BY createdAt DESC
  8.             LIMIT 10

Вопрос:
Что хранится в dialogUserId? И `text` - это текст сообщения?
 
 Top
Sail
Отправлено: 18 Сентября, 2014 - 20:15:17
Post Id



Участник


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


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




ksedin пишет:
Мне нужно, как в ВК

И действительно! Устами Мелкий'ого (чуть ниже) глаголет истина...

(Отредактировано автором: 18 Сентября, 2014 - 20:54:52)

 
 Top
ksedin
Отправлено: 18 Сентября, 2014 - 20:19:18
Post Id


Гость


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


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




Sail пишет:

Выбираем из таблицы для одного получателя (myid) всех отправителей и время последнего сообщения.


Выходит, что если пользователь сам отправил сообщение, не получив при этом ответа - диалог не будет отображаться?
 
 Top
Мелкий Супермодератор
Отправлено: 18 Сентября, 2014 - 20:46:01
Post Id



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


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


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




ksedin пишет:
Что хранится в dialogUserId?

user_id собеседника.

Решения задачи в лоб слишком тяжеловесны. Сделайте отдельно таблицу диалогов, ссылающуюся на последнее сообщение в переписке. Для этой задачи (как и многих других в вебе) характерно существенное превалирование чтения над записью.


-----
PostgreSQL DBA
 
 Top
ksedin
Отправлено: 18 Сентября, 2014 - 21:11:14
Post Id


Гость


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


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




Решения задачи в лоб слишком тяжеловесны. Сделайте отдельно таблицу диалогов, ссылающуюся на последнее сообщение в переписке.[/quote]
Пока не совсем понимаю, как мне это поможет, можно подробней?
 
 Top
Мелкий Супермодератор
Отправлено: 18 Сентября, 2014 - 21:23:22
Post Id



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


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


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




Как чем поможет? Джойните по внешнему ключу и получаете сразу последние сообщения в диалогах.


-----
PostgreSQL DBA
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB