Как составить корректный MySQL-запрос
Формулировка задачи:
Привет всем!
Товарищи эксперты, требуется Ваша помощь!
Есть 3 таблицы с записями (см. рис.)
И есть запрос вида:
"SELECT * FROM `table_users` LEFT JOIN `table_post` USING (userhash)";
Он возвращает записи сгруппированные, из 2ух таблиц `table_users` и `table_post`, которые объединены по одному полю `userhash`.
Вопрос:
Каким должен быть запрос, чтобы из результатов данной выборки исключить все записи, кроме той, котрая отмечена в третьей таблице `table_like`.
Т.е. поля userhash и contenthash выбранной записи должны совпадать со значениями полей userhash и contenthash из таблицы table_likes.
На прилагаемом рисунке искомая запись из трех таблиц обведена красным контуром.
Возможно, для решения данной задачи необходимо будет соорудить некую конструкцию на подобии этой:
"SELECT * FROM (SELECT * FROM `table_users` LEFT JOIN `table_post` USING (userhash)) некие условия выборки с использованием таблицы table_likes";
но подробности такого запроса для меня остаются весьма туманными. Надеюсь на Ваше просвещение.
Заранее спасибо за консультацию!
Решение задачи: «Как составить корректный MySQL-запрос»
textual
Листинг программы
SELECT * FROM table_users tu JOIN table_post tp ON tu.userhash = tp.userhash JOIN table_likes tl ON tl.userhash = tp.userhash AND tl.contenthash = tp.contenthash AND tl.marker LIKE 'yes' GROUP BY tp.id
Объяснение кода листинга программы
В данном коде происходит следующее:
- Выполняется операция SELECT, которая выбирает все столбцы из таблицы.
- В качестве источника данных указывается таблица table_users (tu).
- Выполняется операция JOIN с таблицей table_post (tp) по полю userhash.
- Выполняется операция JOIN с таблицей table_likes (tl) по полям userhash и contenthash, а также с использованием условия AND.
- В качестве условия для JOIN используется выражение tl.marker LIKE 'yes'.
- Результаты запроса группируются по полю tp.id.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д