powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Уникальность по двум полям
9 сообщений из 9, страница 1 из 1
Уникальность по двум полям
    #38377943
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток. Подскажите пожалуйста советом.
Имеется таблица tbl_cross_message это личные сообщения и таблица tbl_users.
В таблице tbl_cross_message имеются колонки id_user_from и id_user_to это отправитель и получатель. Мне необходимо выводить на страницу уникальных пользователей с этих колонок. Типа как в контакте организованы диалоги.
Вот такая архитектура.

Запрос я создал, на первый взгляд работает, но смущает его оптимальность. Посмотрите пожалуйста
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT *
FROM tbl_users t3
LEFT JOIN (
SELECT DISTINCT t0.id_user_from AS id_user
FROM tbl_cross_message t0
WHERE t0.id_user_from=3 OR t0.id_user_to=3 UNION
SELECT DISTINCT t1.id_user_to
FROM tbl_cross_message t1
WHERE t1.id_user_from=3 OR t1.id_user_to=3) t4 ON t3.id=t4.id_user
...
Рейтинг: 0 / 0
Уникальность по двум полям
    #38377947
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу - коли UNION, то DISTINCT-ы можешь смело убирать.
Далее - а что если
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT id_user_from AS id_user
FROM tbl_cross_message
WHERE id_user_to=3 
UNION
SELECT id_user_to
FROM tbl_cross_message
WHERE id_user_from=3
UNION 
SELECT 3

?
Ну и
Код: sql
1.
SELECT *

замени на реальн нужный список полей... кстати, если он невелик, то можно вообще уложиться в индекс и не трогать таблицу.
...
Рейтинг: 0 / 0
Уникальность по двум полям
    #38379212
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaСразу - коли UNION, то DISTINCT-ы можешь смело убирать.
Далее - а что если
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT id_user_from AS id_user
FROM tbl_cross_message
WHERE id_user_to=3 
UNION
SELECT id_user_to
FROM tbl_cross_message
WHERE id_user_from=3
UNION 
SELECT 3

?

Спасибо, а чем лучше ваш запрос? В чем выигрыш?
Насчет звездочки в SELECT, я специально для форума поставил, чтоб не нагружать бесполезными данными. А так я всегда прописываю необходимые колонки.
...
Рейтинг: 0 / 0
Уникальность по двум полям
    #38379266
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT *
FROM tbl_users t3
LEFT JOIN (
SELECT id_user_from AS id_user
FROM tbl_cross_message
WHERE id_user_to=3 
UNION
SELECT id_user_to
FROM tbl_cross_message
WHERE id_user_from=3
UNION 
SELECT 3) t4 ON t3.id=t4.id_user


Получился вот такой запрос, подскажите пожалуйста, а если мне нужно еще подключить id_message это сообщение из таблицы tbl_cross_message к каждому уникальному пользователю. т.е. вывести последнее сообщение к каждому диалогу. Чет не могу придумать.
...
Рейтинг: 0 / 0
Уникальность по двум полям
    #38379292
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarа чем лучше ваш запрос? В чем выигрыш?
Ну, например, тем, что может использовать индекс... в отличие от
Код: sql
1.
WHERE t0.id_user_from=3 OR t0.id_user_to=3
...
Рейтинг: 0 / 0
Уникальность по двум полям
    #38379293
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarа если мне нужно еще подключить id_message это сообщение из таблицы tbl_cross_message к каждому уникальному пользователю. т.е. вывести последнее сообщение к каждому диалогу.Тогда выделяй именно диалоги (пара ИДов), а далее - в ФАК по выбору первого/последнего в группе.
...
Рейтинг: 0 / 0
Уникальность по двум полям
    #38380347
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Посмотрите пожалуйста профессиональным взглядом на мой получившийся запрос, чет сомнения у меня в оптимальности
Код: sql
1.
2.
3.
4.
SELECT t0.id_message, IF(t0.id_user_from=3,t0.id_user_to,t0.id_user_from) as id_user,MAX(t0.time)
FROM tbl_cross_message t0
WHERE t0.id_user_to=3 OR t0.id_user_from=3
GROUP BY id_user
...
Рейтинг: 0 / 0
Уникальность по двум полям
    #38380382
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Уникальность по двум полям
    #38380387
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо. Я не правильно выразился, имел ввиду логически или синтаксически правильно составил запрос? Еще раз извиняюсь за глупые вопросы, просто на пороге познания mysql и много неуверенности в своих действиях.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Уникальность по двум полям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]