Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / sql - запрос / 11 сообщений из 11, страница 1 из 1
20.12.2013, 11:07:06
    #38507566
Oleg8000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
Здравствуйте.

Есть таблица в которую заносятся пользовательские лайки
id user_id liked_id112213321
user_id - кто лайкает
liked_id - кого лайкнули

Можно ли как-то в одном запросе, сделать выборку только тех юзеров, которые взаимно понравились друг другу?
т.е. для примера выше, должна выбраться только первая запись (id=1)
...
Рейтинг: 0 / 0
20.12.2013, 11:11:57
    #38507578
sql - запрос
а почему именно первая, а не третья? ;) Что за дискриминация?
...
Рейтинг: 0 / 0
20.12.2013, 11:12:42
    #38507580
sql - запрос
но вообще, смотреть в сторону EXISTS-подзапроса или самообъединения таблицы...
...
Рейтинг: 0 / 0
20.12.2013, 11:13:32
    #38507582
Oleg8000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
Подразумевается, что ищем взаимнопонравившихся для юзера 1
но в принципе это уже ньюнсы, можно и третью запись
...
Рейтинг: 0 / 0
20.12.2013, 11:42:13
    #38507618
Oleg8000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
такой запрос вроде показывает то что нужно

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT *
FROM `likes` l1
WHERE user_id
IN (
SELECT liked_id
FROM `likes` l2
WHERE user_id =1
)



но что-то мне подсказывает, что на больших данных будут дикие тормоза.
Может кто-то подскажет другие варианты запроса?
...
Рейтинг: 0 / 0
20.12.2013, 12:12:49
    #38507676
artas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
Oleg8000,

Код: sql
1.
2.
3.
SELECT *
FROM `likes` l1
WHERE user_id = 1



Этот запрос аналогичен вашему, но работает быстрее
...
Рейтинг: 0 / 0
20.12.2013, 12:17:32
    #38507683
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
Посоветовали ведь уже:Добрый Э - Эхно вообще, смотреть в сторону EXISTS-подзапроса или самообъединения таблицы...
Код: sql
1.
2.
3.
4.
select u.*
from likes u
join likes t on t.user_id=u.liked_id and t.liked_id=u.user_id
where u.u.user_id < u.liked_id
...
Рейтинг: 0 / 0
20.12.2013, 12:21:04
    #38507688
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
Код: sql
1.
2.
3.
select t1.* 
from likes t1, likes t2
where (t1.user_id, t1.liked_id) = (t2.liked_id, t2.user_id);
...
Рейтинг: 0 / 0
20.12.2013, 13:05:51
    #38507753
Oleg8000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
Всем откликнувшимся спасибо!
Запрос, который дал Akina кажется будет самым шустрым
...
Рейтинг: 0 / 0
20.12.2013, 17:35:42
    #38508266
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
Oleg8000Здравствуйте.

Есть таблица в которую заносятся пользовательские лайки
id user_id liked_id112213321
user_id - кто лайкает
liked_id - кого лайкнули

Можно ли как-то в одном запросе, сделать выборку только тех юзеров, которые взаимно понравились друг другу?
т.е. для примера выше, должна выбраться только первая запись (id=1)

Код: sql
1.
2.
3.
select distinct user_id
from LIKES l
where exists( select * from LIKES l1 where l1.user_id = l.liked_id and l1 liked_id = l.user_id )
...
Рейтинг: 0 / 0
20.12.2013, 19:00:43
    #38508389
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql - запрос
MasterZivOleg8000Можно ли как-то в одном запросе, сделать выборку только тех юзеров, которые взаимно понравились друг другу ?
Код: sql
1.
2.
3.
select distinct user_id
from LIKES l
where exists( select * from LIKES l1 where l1.user_id = l.liked_id and l1 liked_id = l.user_id )

Этот запрос не показывает взаимности :)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / sql - запрос / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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