|
|
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Подскажите пожалуйста, как выбрать уникальные значения из двух полей, где могут содержаться одинаковые id? Есть таблица сообщений, где есть id сообщения, from_id и to_id. Необходимо получить пять уникальных значений по двум полям from_id и to_id, где from_id=мой id (т.е. пишу я) и to_id=мой id (где пишут мне), и где id отсортировано по убыванию (от большего к меньшему). Нужен конкретный запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 02:53:36 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
Иосиф111где from_id=мой id (т.е. пишу я) и to_id=мой id (где пишут мне) Видимо, всё-таки ИЛИ? Иосиф111Необходимо получить пять уникальных значений по двум полям from_id и to_id Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 09:23:33 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
Akina, AkinaВидимо, всё-таки ИЛИ? всё верно. AkinaORDER BY 1 DESC А что за 1? это разве группировка по id? Мне нужно получить id уникальных авторов (from_id и to_id) с самыми последними сообщениями (id). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 10:31:08 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
Akina, AkinaВидимо, всё-таки ИЛИ? всё верно. AkinaORDER BY 1 DESC А что за 1? это разве сортировка по id? Мне нужно получить id уникальных авторов (from_id и to_id) с самыми последними сообщениями (id). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 10:33:20 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
Иосиф111А что за 1? это разве сортировка по id?сортировка по полю выборки номер 1 в данном случае по ид собеседника Иосиф111с самыми последними сообщениями (id).ну так с этого и надо было начинать: FAQ: Выборка первой/последней записи в группах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 11:21:45 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
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 к меньшему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 11:44:55 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
Иосиф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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 13:07:46 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
tanglirто это одним запросом без всяких подзапросов решается банальный max(id) + group by тот_самый_case + order by max_id desc limit 5 tanglir, не сочтите за труд, пожалуйста, напишите запрос применительно к моему случаю. Бьюсь над этой задачей, не могу решить. Мозги кипят, а выхлоп нулевой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 13:19:27 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
Иосиф111, Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 13:26:31 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
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" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 13:41:53 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 13:50:57 |
|
||
|
Выборка уникальных значений из двух полей, где содержатся id
|
|||
|---|---|---|---|
|
#18+
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"; всё правильно сделал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 13:53:08 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39127089&tid=1832380]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
419ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 188ms |
| total: | 679ms |

| 0 / 0 |
