powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка уникальных значений из двух полей, где содержатся id
13 сообщений из 13, страница 1 из 1
Выборка уникальных значений из двух полей, где содержатся id
    #39126916
Иосиф111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Подскажите пожалуйста, как выбрать уникальные значения из двух полей, где могут содержаться одинаковые id?
Есть таблица сообщений, где есть id сообщения, from_id и to_id.
Необходимо получить пять уникальных значений по двум полям from_id и to_id, где from_id=мой id (т.е. пишу я) и to_id=мой id (где пишут мне), и где id отсортировано по убыванию (от большего к меньшему).
Нужен конкретный запрос.
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39126969
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иосиф111где from_id=мой id (т.е. пишу я) и to_id=мой id (где пишут мне)
Видимо, всё-таки ИЛИ?

Иосиф111Необходимо получить пять уникальных значений по двум полям from_id и to_id
Код: sql
1.
2.
3.
4.
SELECT DISTINCT CASE WHEN from_id=my_id THEN to_id ELSE from_id END
FROM `table`
WHERE from_id=my_id OR to_id=my_id
ORDER BY 1 DESC LIMIT 5
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127030
Иосиф111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

AkinaВидимо, всё-таки ИЛИ?

всё верно.

AkinaORDER BY 1 DESC

А что за 1? это разве группировка по id?

Мне нужно получить id уникальных авторов (from_id и to_id) с самыми последними сообщениями (id).
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127035
Иосиф111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

AkinaВидимо, всё-таки ИЛИ?
всё верно.

AkinaORDER BY 1 DESC
А что за 1? это разве сортировка по id?

Мне нужно получить id уникальных авторов (from_id и to_id) с самыми последними сообщениями (id).
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127089
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иосиф111А что за 1? это разве сортировка по id?сортировка по полю выборки номер 1
в данном случае по ид собеседника

Иосиф111с самыми последними сообщениями (id).ну так с этого и надо было начинать: FAQ: Выборка первой/последней записи в группах
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127110
Иосиф111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir, сходил по вашей ссылке, но не смог понять, где решение под мой случай. Недостаток серого вещества видимо сказывается.

Я так понимаю у меня должен быть примерно такой запрос, судя по ответам в тему:
$qqq="SELECT DISTINCT CASE WHEN from_user_id='$my' THEN to_user_id ELSE from_user_id END FROM chat WHERE from_user_id='$my' OR to_user_id='$my' ORDER BY chat.id DESC LIMIT 5";

но print_r полученного массива выдаёт вот что (а должен уникальные id пользователей):
Array ( [0] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 56 ) [1] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 81 ) [2] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 66 ) [3] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 24 ) [4] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 20 ) )

причём даже в этом массиве сообщения расположились без учёта сортировки по id сообщения начиная от большего id к меньшему
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127207
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иосиф111но print_r полученного массива выдаёт вот что (а должен уникальные id пользователей)
<...>
причём даже в этом массиве сообщения расположились без учёта сортировки по id сообщения начиная от большего id к меньшемуИосиф111, то есть выполнить запрос вы смогли, а понять, что он делает, не очень.
Это и есть уникальные ид пользователей-собеседников. Ровно 5 штук (или меньше, если столько не наберётся). И расположились они так потому что... ну как бы объяснить. Проще спросить, за каким ***** вы пытаетесь сортировать по айдишнику записи, который после такого distinct-а, как в запросе, будет недетерминирован.
Вообще, если задача стоит именно так
Иосиф111получить id уникальных авторов (from_id и to_id) с самыми последними сообщениями (id)., то это одним запросом без всяких подзапросов решается
банальный max(id) + group by тот_самый_case + order by max_id desc limit 5
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127229
Иосиф111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirто это одним запросом без всяких подзапросов решается
банальный max(id) + group by тот_самый_case + order by max_id desc limit 5

tanglir, не сочтите за труд, пожалуйста, напишите запрос применительно к моему случаю. Бьюсь над этой задачей, не могу решить. Мозги кипят, а выхлоп нулевой.
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127242
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иосиф111,

Код: sql
1.
2.
3.
4.
select тот_самый_case,max(id)
from chat
group by 1
order by 2 desc limit 5
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127271
Иосиф111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,
благодарю вас за помощь.

вот мой запрос:
$qqq="SELECT DISTINCT CASE WHEN from_user_id='$my' THEN to_user_id ELSE from_user_id END,max(id) FROM chat WHERE from_user_id='$my' OR to_user_id='$my' group by 1 order by 2 DESC LIMIT 5";

дал такой print_r:
Array ( [0] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 20 [max(id)] => 17 ) [1] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 56 [max(id)] => 14 ) [2] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 81 [max(id)] => 13 ) [3] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 66 [max(id)] => 12 ) [4] => Array ( [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] => 24 [max(id)] => 11 ) )

все при первом осмотре верно. Правда я не совсем понимаю каким образом мне вытянуть из этого массива значения переменных по ключу?
тут ведь ключ везде разный - например [CASE WHEN from_user_id='7' THEN to_user_id ELSE from_user_id END] и тп.

когда я пытаюсь получить значение по ключу to_user_id, то мне выдаётся ошибка "Message: Undefined index: to_user_id"
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127285
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(c)Hett
Разберитесь, что делает этот case - и поймёте, что(и как) делает запрос.
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127291
Иосиф111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,
вроде бы разобрался. я добавил индексы к выбираемым полям и по ним получаю значения теперь

$qqq="SELECT DISTINCT CASE WHEN from_user_id='$my' THEN to_user_id ELSE from_user_id END as usid ,max(id) as id FROM chat WHERE from_user_id='$my' OR to_user_id='$my' group by 1 order by 2 DESC LIMIT 5";

всё правильно сделал?
...
Рейтинг: 0 / 0
Выборка уникальных значений из двух полей, где содержатся id
    #39127639
Иосиф111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir, благодарю вас за помощь. голова!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка уникальных значений из двух полей, где содержатся id
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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