Задавайте вопросы, мы ответим
Вы не зашли.
Есть 3 таблицы:
1. Таблица постов posts [id, name]
2. Таблица категорий cat [id, name]
3. Таблица связи post_cat [post_id, cat_id]
Требуется составить запрос выбора постов и всех категорий с условие вхождения какой-то категории
Запрос
SELECT * FROM post AS p
LEFT JOIN post_cat AS pc
ON pc.post_id=p.id
LEFT JOIN cat AS c
ON c.id=pc.cat_id
Выдаёт посты и все категории в которых находиться пост. Требуется вывести все посты и категории для поста, где есть категория с id=5 например
С таким запросом мы не получаем список категорий для поста.
SELECT * FROM post AS p
LEFT JOIN post_cat AS pc
ON pc.post_id=p.id
LEFT JOIN cat AS c
ON c.id=pc.cat_id
WHERE c.id=5
Как правильно вставить условие?
Неактивен
Кажется, что Вы хотите объединить два независимых запроса в один. Зачем?
Неактивен
Например мне нужно вывести 50 постов и для каждого поста его категории. Если делать отдельные запросы тогда для каждого поста нужно сделать запрос на получение категорий для него следовательно получаем 1 + 50 = 51 запрос. Понятно что такое нкуда не годиться.
Неактивен
Мне не понятно, например. Передо мной вышел хор мальчиков-зайчиков. Чтобы
узнать, как каждого из них зовут, мне нужно у каждого из них это спросить. Даже
если у меня есть журнал с именами, мне все равно надо у каждого из них спросить,
на какой строке в журнале он записан.
Неактивен
У вас единичное сопоставление, один мальчик одно имя. Давайте на ваших мальчиках покажу что мне нужно
Каждый мальчик в хоре во что-то одет,
мальчик №1: красная рубашка, синие штаны
мальчик №2: зеленая рубашка и фиолетовые штаны
Мне нужно получить всех мальчиков и во что они одеты(одежда из другой таблицы), всё это делается просто обычный join
Но если требуется показать только тех мальчиков у которых синие штаны, но и не потерять остальную одежду.
Неактивен
Да, Вам нужно найти мальчиков с синими штанами, а потом посмотреть, какая
одежда находится на каждом из мальчиков. На каждого мальчика прийдется
взглянуть отдельно. А то вдруг кто-то кроме штанов ничего не оденет
Неактивен
ТО есть при 50 мальчиков вы предлагаете сделать 51 запрос. Но всё это можно сделать одним запросом, нужно 2 раза подключить таблицу, первое подключение для условия а второе для выбора одежды.
Неактивен
Попробуйте использовать подзапрос
Что-то типа SELECT таб1.* таб2.* FROM(SELECT ...FROM таб3) as таб2 JOIN `таб1` ON c.id=pc.cat_id
WHERE c.id=5
Если я правильно понял то что вам надо...
Неактивен
Да, можно выбрать всех мальчиков и всю одежду. И еще журнал сопоставления
мальчиков с одеждой. И сопоставить в клиентском приложении. Можно, но не удобно.
Подзапросом, как написал FDL45, делать удобнее — это как раз 50 мальчиков и
подзапросом выбор костюма для конкретного мальчика.
Неактивен