Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, уважаемые специалисты! Помогите пожалуйста разобраться!
Есть две таблицы 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 в группе. Имеются на данный момент три новости и две фотки к одной из новостей. Выводит одну новость с фото и другую без фото, а третья новость вообще не выводится. Целый день ломаю голову, где я делаю ошибку?
Неактивен
Третья не выводится потому, что делаете группировку по `id_news`. Это поле у двух новостей без фото равно null, поэтому и выбирается только одна.
Посмотрите ещё
http://sqlinfo.ru/articles/info/18.html
Неактивен
Спасибо, буду разбираться
Неактивен
Составил два работающих запроса к базе. Первый запрос вытаскивает из второй таблицы последние по времени загрузки фотки для каждой новости(для каждой новости могут загружаться несколько фоток), но не выводит данные из первой таблицы:
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
Подскажите пожалуйста как можно правильно написать запрос к базе, чтобы переписать второй запрос с учетом первого?
Неактивен
SELECT .. FROM news LEFT JOIN (первый запрос)
Неактивен
vasya написал:
SELECT .. FROM news LEFT JOIN (первый запрос)
Чуть подробней напишите, если не сложно, как именно это будет записано?
Неактивен
Составил такой запрос, но он выводит декартово произведение данных из обоих таблиц, где я ошибаюсь?
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))
Неактивен
У вас есть запрос, который вытаскивает из второй таблицы последние по времени загрузки фотки для каждой новости. Результат этого запроса - таблица.
Джойните таблицу новостей с полученной таблицей.
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;
Неактивен
Спасибо вам огромное!! Сколько дней бился, наконец с вашей помощью заработало вроде!! И сам много нового узнал!))
Неактивен