[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из связанных по ключу таблиц
Zaur
Здравствуйте, уважаемые специалисты! Помогите пожалуйста разобраться!

Составил такой запрос к базе

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 ". IRB_DBPREFIX . $this->table ." AS b
LEFT OUTER JOIN ". IRB_DBPREFIX . $this->table ."photo AS u
ON b.id = u.id_news
GROUP BY `id_news`

Должен выводится список новостей и к каждой новости одну из фоток с максимальным id в группе. Имеются на данный момент три новости и две фотки к одной из новостей. Выводит одну новость с фото и другую без фото, а третья новость вообще не выводится. Целый день ломаю голову, где я делаю ошибку?
Alchemist
в GROUP BY
Zaur
А какую именно? biggrin.gif
Alchemist
выбираешь неправильное поле для группировки
Zaur
Подскажите а какое поле лучше выбрать? В таблице news есть поля id, title, text, date. А в таблице news_photo, где фотографии, есть поля id, id_news и photo(тут адреса url к фоткам). Может новое поле какое-то вести или группировать по двум полям?
Alchemist
искренне надеюсь что за прошедшие 3 дня ты успел найти нужное поле
Zaur
)) спасибо, я сгруппировал по двум полям и на первый взгляд вроде работает, но вытаскивать из группы фотографий последнюю пока не получается, вот код

SELECT u.id AS id,
u.dateloadimg AS dateloadimg,
b.title AS title,
b.id AS bid,
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 ". IRB_DBPREFIX . $this->table ."photo AS u
RIGHT OUTER JOIN ". IRB_DBPREFIX . $this->table ." AS b
ON u.id_news = b.id
GROUP BY `id_news` , b.id
ORDER BY `date` DESC

Помогите пинком в нужном направлении)
Valick
Цитата
вытаскивать из группы фотографий последнюю пока не получается

MAX(`поле datetime дата и время загрузки фото`)

_____________
Стимулятор ~yoomoney - 41001303250491
Zaur
Логично, но не работает( не пойму вот почему нельзя группировать только по id_news ? (id_news это у меня внешний ключ, по которому связываются таблицы). Ведь это единственное поле с повторяющимися значениями, а если правильно понимаю, то если группировать, то по полю, где есть повторяющиеся значения, разве не так?
Zaur
Составил такой запрос, но он выводит декартово произведение из обоих таблиц!
Где ошибаюсь?

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))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.