у меня есть но подозреваю что есть более оптимальное решение.
Есть две таблицы, offers и visited_offers.
Человек когда заходит на какой то офферс, мы это записываем.
Несколько раз заходит, несколько записей в visited_offers мы создадим.
Нужно сделать запрос в базу так чтобы нам вернуло все офферсы который наш человек видел, так сказать историю чтобы он свою видел.
Моё решение:
SELECT * FROM offers WHERE id IN (SELECT offer_id FROM visited_offers WHERE user_id = 123)
Но я думаю что можно как то более оптимальное. Можете ли найти решение по лучше ?
Если не нужны данные из второй таблицы можно использовать where exists https://sqlize.online/sql/mysql57/19501ccec42927061064f9c61f2f10a9/
Будет ли это быстрее ? ведь он будет проходится по всем офферам и проверять в таблице visited_offers
а если join ?
С джойна начинал но были некоторые проблемы, сейчас скину запрос
дело в том что мне надо уникальные офферы вернуть а не 10 раз тот же оффер если 10 просмотров было, а груп бай я сделать не могу потому что он хочет чтобы всё что группирую всё было в селекте
дистинкт, но надо по производительности сравнивать
SELECT of_ FROM offers of_ INNER JOIN visited_offers vo_ ON ( vo_.offer_id = of_.id AND vo_.user_id = 123 ) WHERE vo_.user_id = 123 AND of_.STATUS = 'published' AND of_.replaced_with_offer_id IS NULL AND vo_.id IS NOT NULL ORDER BY vo_.visited_at DESC LIMIT 3
зачем юзер ид и в ОН и в вере
не важно на самом деле, можно удалить
Обсуждают сегодня