Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка уникальных значений из двух полей, где содержатся id / 13 сообщений из 13, страница 1 из 1
14.12.2015, 02:53:36
    #39126916
Иосиф111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
Здравствуйте!
Подскажите пожалуйста, как выбрать уникальные значения из двух полей, где могут содержаться одинаковые id?
Есть таблица сообщений, где есть id сообщения, from_id и to_id.
Необходимо получить пять уникальных значений по двум полям from_id и to_id, где from_id=мой id (т.е. пишу я) и to_id=мой id (где пишут мне), и где id отсортировано по убыванию (от большего к меньшему).
Нужен конкретный запрос.
...
Рейтинг: 0 / 0
14.12.2015, 09:23:33
    #39126969
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
Иосиф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
14.12.2015, 10:31:08
    #39127030
Иосиф111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
Akina,

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

всё верно.

AkinaORDER BY 1 DESC

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

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

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

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

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

Иосиф111с самыми последними сообщениями (id).ну так с этого и надо было начинать: FAQ: Выборка первой/последней записи в группах
...
Рейтинг: 0 / 0
14.12.2015, 11:44:55
    #39127110
Иосиф111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
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
14.12.2015, 13:07:46
    #39127207
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
Иосиф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
14.12.2015, 13:19:27
    #39127229
Иосиф111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
tanglirто это одним запросом без всяких подзапросов решается
банальный max(id) + group by тот_самый_case + order by max_id desc limit 5

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

Код: sql
1.
2.
3.
4.
select тот_самый_case,max(id)
from chat
group by 1
order by 2 desc limit 5
...
Рейтинг: 0 / 0
14.12.2015, 13:41:53
    #39127271
Иосиф111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
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
14.12.2015, 13:50:57
    #39127285
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
(c)Hett
Разберитесь, что делает этот case - и поймёте, что(и как) делает запрос.
...
Рейтинг: 0 / 0
14.12.2015, 13:53:08
    #39127291
Иосиф111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
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
14.12.2015, 18:16:47
    #39127639
Иосиф111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных значений из двух полей, где содержатся id
tanglir, благодарю вас за помощь. голова!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка уникальных значений из двух полей, где содержатся id / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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