09:09

SQL

alhames.ru
Имеется две таблицы:
news
idtitlecontentdate

и
foto
idparentfilesort

Где `foto`.`parent` = `news`.`id`. Отношение новость <-> фото - один ко многим.

Имеется запрос:
SELECT N.*, F.`file`
FROM `news` AS N
LEFT JOIN `foto` AS F ON (F.`parent` = N.`id`)
GROUP BY N.`id`
ORDER BY N.`date` DESC, F.`sort` ASC
LIMIT 10


Задача, выбрать для каждой новости первое фото по полю `sort`. Но ORDER BY F.`sort` ASC не работает совершенно до тех пор пока в запросе есть GROUP BY
Есть ли возможность не разделяя запрос как-то заставить сортировать фото?

@темы: MySQL

Комментарии
01.07.2011 в 11:39

There I was on a July morning, Looking for love
alhames
ИМХО лучшим вариантом будет добавить в таблицу foto ещё одно поле - main, булево. При добавлении/редактировании фотографий нужно просто проследить, чтобы у одной из фотографий конкретной новости main = 1, у остальных 0. Тогда все проще простого:

01.07.2011 в 12:26

alhames.ru
Тогда наверное так:
WHERE f.main = '1'
Но тогда новости без фоток выбираться не будут (у меня LEFT JOIN ведь).
Разве что засунуть его в ON.. Но проблема в том, что расширять таблицу - не самое лучшее решение, т.к. еще и скрипты сортировки / добавления фото придется подстраивать..
Но мысль понял, спасибо :)
01.07.2011 в 12:41

Люди никогда не достигнут совершенства, пока будут оставаться людьми...
почему бы не написать MIN?
01.07.2011 в 13:06

alhames.ru
[revolver] где? Куда? Он ведь ничего не даст..
01.07.2011 в 13:11

В своё время про этому поводу был нагуглен аццкий мегахак.
Ситуация примерно такая же, только вместо news - item, а вместо foto - itemimage.

select t.*, SUBSTRING(MIN(CONCAT(RPAD(p.Position,6,' '), image)),7) as Image
from item t left outer join itemimage p on t.id = p.itemId
group by t.id

Соответственно твой вариант будет что-то вроде такого

SELECT N.*, SUBSTRING(MIN(CONCAT(RPAD(F.sort,6,' '), file)),7) as file
FROM `news` AS N
LEFT JOIN `foto` AS F ON (F.`parent` = N.`id`)
GROUP BY N.`id`
ORDER BY N.`date` DESC
LIMIT 10
01.07.2011 в 15:11

alhames.ru
Tzota спс, кажется помогло )
01.07.2011 в 15:35

There I was on a July morning, Looking for love
Tzota
OMG greatshot :-) :-) :-) !

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail