SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 21.08.2014 13:07:53

Zaur
Участник
Зарегистрирован: 21.08.2014
Сообщений: 6

Помогите с выборкой из двух таблиц

Здравствуйте, уважаемые специалисты! Помогите пожалуйста разобраться!
Есть две таблицы news и news_photo, связанные по ключу id_news. В первой таблице находятся новости, а во второй - фотографии к ним, к каждой новости может быть несколько фотографий. Должен выводится список новостей с последней фоткой к каждой новости.
Составил такой запрос к базе

SELECT MAX(u.id) AS id,
b.title AS title,
DATE_FORMAT((b.date), '%d.%m.%Y') AS date,
SUBSTRING_INDEX((b.text), ' ', ". $num_words .") AS text,
u.id_news AS id_news,
u.photo AS photo
FROM news AS b
LEFT OUTER JOIN news_photo AS u
ON b.id = u.id_news
GROUP BY `id_news`

Должен выводится список новостей и к каждой новости одну из фоток с максимальным id в группе. Имеются на данный момент три новости и две фотки к одной из новостей. Выводит одну новость с фото и другую без фото, а третья новость вообще не выводится. Целый день ломаю голову, где я делаю ошибку?

Неактивен

 

#2 21.08.2014 13:14:38

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

Re: Помогите с выборкой из двух таблиц

Третья не выводится потому, что делаете группировку по `id_news`. Это поле у двух новостей без фото равно null, поэтому и выбирается только одна.

Посмотрите ещё
http://sqlinfo.ru/articles/info/18.html

Неактивен

 

#3 21.08.2014 14:09:07

Zaur
Участник
Зарегистрирован: 21.08.2014
Сообщений: 6

Re: Помогите с выборкой из двух таблиц

Спасибо, буду разбираться

Неактивен

 

#4 25.08.2014 17:14:53

Zaur
Участник
Зарегистрирован: 21.08.2014
Сообщений: 6

Re: Помогите с выборкой из двух таблиц

Составил два работающих запроса к базе. Первый запрос вытаскивает из второй таблицы последние по времени загрузки фотки для каждой новости(для каждой новости могут загружаться несколько фоток), но не выводит данные из первой таблицы:

SELECT photo as photo FROM ". IRB_DBPREFIX . $this->table ."photo WHERE dateloadimg IN
    (SELECT MAX(dateloadimg) as dateloadimg FROM ". IRB_DBPREFIX . $this->table ."photo  GROUP BY id_news

Второй запрос объединяет таблицы по внешнему ключу и выводит все данные и фотографии из двух таблиц, но выводит все поля с новостями и фотографиями подряд

SELECT   b.title AS title,
         b.text  AS text,
         b.date  AS date,
         b.id AS id,
         u.photo AS photo
         FROM ". IRB_DBPREFIX . $this->table ."photo AS u   
         RIGHT OUTER JOIN ". IRB_DBPREFIX . $this->table ." AS b
         ON u.id_news  = b.id
         ORDER BY `date` DESC

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

Неактивен

 

#5 25.08.2014 17:26:29

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

Re: Помогите с выборкой из двух таблиц

SELECT .. FROM news LEFT JOIN (первый запрос)

Неактивен

 

#6 25.08.2014 18:12:09

Zaur
Участник
Зарегистрирован: 21.08.2014
Сообщений: 6

Re: Помогите с выборкой из двух таблиц

vasya написал:

SELECT .. FROM news LEFT JOIN (первый запрос)

Чуть подробней напишите, если не сложно, как именно это будет записано?

Неактивен

 

#7 26.08.2014 10:55:31

Zaur
Участник
Зарегистрирован: 21.08.2014
Сообщений: 6

Re: Помогите с выборкой из двух таблиц

Составил такой запрос, но он выводит декартово произведение данных из обоих таблиц, где я ошибаюсь?

SELECT
        u.photo as photo,
        u.dateloadimg as dateloadimg,
         u.id_news as id_news,
         b.title AS title,
         b.text AS text,
          b.id AS bid,
          b.date AS date
          
        FROM ". IRB_DBPREFIX . $this->table ." AS b
    LEFT OUTER JOIN ". IRB_DBPREFIX . $this->table ."photo AS u
    ON b.id IN
    (SELECT id_news as id_news FROM ". IRB_DBPREFIX . $this->table ."photo WHERE dateloadimg IN
    (SELECT MAX(dateloadimg) as dateloadimg FROM ". IRB_DBPREFIX . $this->table ."photo  GROUP BY id_news))

Неактивен

 

#8 26.08.2014 11:10:49

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

Re: Помогите с выборкой из двух таблиц

У вас есть запрос, который вытаскивает из второй таблицы последние по времени загрузки фотки для каждой новости. Результат этого запроса - таблица.
Джойните таблицу новостей с полученной таблицей.

SELECT ..
FROM news AS b
LEFT JOIN (
SELECT .. FROM news_photo WHERE dateloadimg IN
    (SELECT MAX(dateloadimg) as dateloadimg FROM news_photo GROUP BY id_news)
) AS u
ON b.id = u.id_news;

Неактивен

 

#9 26.08.2014 13:52:13

Zaur
Участник
Зарегистрирован: 21.08.2014
Сообщений: 6

Re: Помогите с выборкой из двух таблиц

Спасибо вам огромное!! Сколько дней бился, наконец с вашей помощью заработало вроде!! И сам много нового узнал!))

Неактивен

 

Board footer

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