SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 24.08.2013 22:55:19

Strannik
Участник
Зарегистрирован: 24.08.2013
Сообщений: 2

Получение данных из другой таблицы

Подскажите можно ли в одном запросе получить данные подобным образом? И если да, то как?

Таблица 1: post (id, title, text)
1, test1, ....
2, test2, ....
3, test3, ....
4, test4, ....

Таблица 2: post_adv (id, post_id, name, value)
1, 1, type, news
2, 1, date, 2012-01-01
3, 1, email, y@y.ru
4, 2, email, w@w.ru
1, 3, type, ask
2, 3, date, 2012-11-24

Для некоторых постов (~1%) из таблицы post существуют дополнения в таблице post_adv.
Привязка записей идёт по post.id = post_adv.post_id
К одному post.id может быть несколько (до 10) записей в post_adv отличающихся значениями name

Нужно составить запрос чтобы на выходе получить строки из post для которых нет дополнений в post_adv и строки из post, к которым есть дополнения с name равными type и date. Причём вернуться должны значения полей value, а сами поля назвать type и date:

post.id    title    text     type     date
1           test1   ....      news    2012-01-01
2           test2   ....      NULL     NULL
3           test3   ....      ask      2012-11-24
4           test4   ....      NULL     NULL

Примерный вариант такой:
SELECT post.id, post.title, max( if(post_adv.name = 'new', Value, NULL ) ) AS type , max( if(post_adv.name = 'date', Value, NULL ) ) AS date
FROM post, post_adv WHERE post.id = post_adv.post_id GROUP BY post.id

Но не выводятся строки, к которым нет дополнения

Отредактированно Strannik (25.08.2013 11:42:58)

Неактивен

 

#2 25.08.2013 03:04:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Получение данных из другой таблицы

SELECT post.id FROM post LEFT JOIN post_adv ON post.id = post_adv.post_id WHERE post_adv.post_id IS NULL -- вернет строки, не имеющие дополнения.

Ваш запрос вернет все строки, имеющие дополнения, а не только "к которым есть дополнения с name равными type и date".

Неактивен

 

#3 25.08.2013 11:41:42

Strannik
Участник
Зарегистрирован: 24.08.2013
Сообщений: 2

Re: Получение данных из другой таблицы

Спасибо!
Я нашёл похожее решение, где выводятся все строки по моему условию.

SELECT post.id, post.title, news.value AS news2, asc1.value AS asc2
FROM post
LEFT JOIN post_adv news1 ON news1.name = 'news' AND post.id = news1.post_id
LEFT JOIN post_adv asc1 ON asc1.name = 'asc' AND post.id = asc1.post_id
ORDER BY post.id

Теперь другая задача появилась как вызвать из post только те строки, к которым в post_adv есть поля со значениями `name` = 'asc' и 'news'
А с остальными не выводить.

УПС. Это решилось ещё быстрее.)
Спасибо, что натолкнули на мысль.

SELECT post.id, post.title, news1.value AS news2, asc1.value AS asc2 FROM post, post_adv news1, post_adv asc1
WHERE (news1.name = 'news' AND post.id = news1.post_id) AND (asc1.name = 'asc' AND post.id = asc1.post_id)
ORDER BY post.id

Отредактированно Strannik (25.08.2013 11:55:15)

Неактивен

 

Board footer

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