Ознакомьтесь с нашей политикой обработки персональных данных
09:09 

SQL

alhames
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

Комментарии
2011-07-01 в 11:39 

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

2011-07-01 в 12:26 

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

2011-07-01 в 12:41 

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

2011-07-01 в 13:06 

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

2011-07-01 в 13:11 

Tzota
В своё время про этому поводу был нагуглен аццкий мегахак.
Ситуация примерно такая же, только вместо 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

2011-07-01 в 15:11 

alhames
alhames.ru
Tzota спс, кажется помогло )

2011-07-01 в 15:35 

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

   

@web-программирование

главная