SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.12.2010 18:18:39

kaliostro
Участник
Зарегистрирован: 23.12.2010
Сообщений: 4

Запрос получения постов с категориями

Есть 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


Как правильно вставить условие?

Неактивен

 

#2 24.12.2010 02:21:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос получения постов с категориями

Кажется, что Вы хотите объединить два независимых запроса в один. Зачем?

Неактивен

 

#3 24.12.2010 10:15:32

kaliostro
Участник
Зарегистрирован: 23.12.2010
Сообщений: 4

Re: Запрос получения постов с категориями

Например мне нужно вывести 50 постов и для каждого поста его категории. Если делать отдельные запросы тогда для каждого поста нужно сделать запрос на получение категорий для него следовательно получаем 1 + 50 = 51 запрос. Понятно что такое нкуда не годиться.

Неактивен

 

#4 24.12.2010 16:16:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос получения постов с категориями

Мне не понятно, например. Передо мной вышел хор мальчиков-зайчиков. Чтобы
узнать, как каждого из них зовут, мне нужно у каждого из них это спросить. Даже
если у меня есть журнал с именами, мне все равно надо у каждого из них спросить,
на какой строке в журнале он записан.

Неактивен

 

#5 25.12.2010 00:04:55

kaliostro
Участник
Зарегистрирован: 23.12.2010
Сообщений: 4

Re: Запрос получения постов с категориями

У вас единичное сопоставление, один мальчик одно имя. Давайте на ваших мальчиках покажу что мне нужно
Каждый мальчик в хоре во что-то одет,
мальчик №1: красная рубашка, синие штаны
мальчик №2: зеленая рубашка и фиолетовые штаны

Мне нужно получить всех мальчиков и во что они одеты(одежда из другой таблицы), всё это делается просто обычный join
Но если требуется показать только тех мальчиков у которых синие штаны, но и не потерять остальную одежду.

Неактивен

 

#6 25.12.2010 18:10:19

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос получения постов с категориями

Да, Вам нужно найти мальчиков с синими штанами, а потом посмотреть, какая
одежда находится на каждом из мальчиков. На каждого мальчика прийдется
взглянуть отдельно. А то вдруг кто-то кроме штанов ничего не оденет wink

Неактивен

 

#7 27.12.2010 12:56:59

kaliostro
Участник
Зарегистрирован: 23.12.2010
Сообщений: 4

Re: Запрос получения постов с категориями

ТО есть при 50 мальчиков вы предлагаете сделать 51 запрос. Но всё это можно сделать одним запросом, нужно 2 раза подключить таблицу, первое подключение для условия а второе для выбора одежды.

Неактивен

 

#8 27.12.2010 13:32:35

FDL45
Завсегдатай
Зарегистрирован: 29.11.2010
Сообщений: 40

Re: Запрос получения постов с категориями

Попробуйте использовать подзапрос
Что-то типа SELECT таб1.* таб2.*   FROM(SELECT ...FROM таб3) as таб2 JOIN `таб1` ON c.id=pc.cat_id
WHERE c.id=5
Если я правильно понял то что вам надо...

Неактивен

 

#9 27.12.2010 15:11:01

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос получения постов с категориями

Да, можно выбрать всех мальчиков и всю одежду. И еще журнал сопоставления
мальчиков с одеждой. И сопоставить в клиентском приложении. Можно, но не удобно.

Подзапросом, как написал FDL45, делать удобнее — это как раз 50 мальчиков и
подзапросом выбор костюма для конкретного мальчика.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson