LIMIT для IN - реально?

Духовность™

Продвинутый новичок
LIMIT для IN - реально?

Ситуация: есть статьи. К каждой статье может быть привязана куча картинок. Соответственно есть таблицы статьи (articles), изображения (images), таблица связей (centre).

При выводе статьи нужно выводить от 1 до N картинок, закрепленных за статьей, но не все.

Раньше делался 1 SQL-запрос на выборку картинок: SELECT * FROM ... WHERE id_article = 1

Возникла идея собирать в массив ID статей и ОДНИМ SQL-запросом получать изображения:

PHP:
SELECT
    centre.id_article, 
    images.* 
FROM 
    images 
INNER JOIN 
    centre
ON 
    images.id_image = centre.id_image 
WHERE 
    centre.id_article IN (10, 8, 7)  #10, 8, 7 - идентификаторы статей
Данный вариант хорош, если бы не одно НО - надо ругулировать каким-то LIMIT-ом, сколько строк получать в результате. Например, если у этих трёх статей по 100 картинок загружено, а нам нужно вывести лишь первые 3, то результат запроса должен быть 9 строк.

Как?
 

Армян

Новичок
"красивого" решения незнаю! придумал извращенный-способ:
сгуппировать по id_article, и GROUP_CONCAT'ом получить список всех ид, а там SUBSTR, STRPOS
:)
 

Gas

может по одной?
triumvirat
либо union'ом, либо через переменные оставить только нужные картинки, как пример идеи можешь смотреть это.
 

Фанат

oncle terrible
Команда форума
флоппик
Он выводит список статей
Вместе со списком выводит картинки.

Имхо, картинки проще получать отдельными запросами.
 

Духовность™

Продвинутый новичок
Имхо, картинки проще получать отдельными запросами.
Роман, тогда у меня при выводе 10 статей с превью 10 запросов получается :(


через переменные оставить только нужные картинки
ыыыы не красиво как-то)
 

Gas

может по одной?
ещё раз повторить 3-ий возможный вариант (врятли последний) - union.

ыыыы не красиво как-то)
когда моя жена смотрит на любой код или html, не понимает как там что-то можно понять, ей тоже не красиво :)
 

Фанат

oncle terrible
Команда форума
10 запросов получается
Ах, это катастрофа! Остается только завернуться в простыню и ползти на кладбище!

Я, мне кажется, где-то лет в 5 или 6 начал понимать, что главное - не количество монеток, а их достоинство. Одна монетка в рубль лучше, чем десять по копейке.
Половина посетителей этого форума по-моему, так и не перешагнула этот возрастной рубеж.
Умрусь, но сделаю все одним запросом! Это же цель жизни и святой грааль программиста.
Идеальный похапе скрипт - это тот, который выводит ВЕСЬ контент, от баннеров до статьи одним запросом. С помощью UNION это сделать вполне реально. Ведь гравная цель похаписта - это не скорость работы сайта, а количество запросов, ***
 

pilot911

Новичок
Автор оригинала: *****
Ах, это катастрофа! Остается только завернуться в простыню и ползти на кладбище!

Я, мне кажется, где-то лет в 5 или 6 начал понимать, что главное - не количество монеток, а их достоинство. Одна монетка в рубль лучше, чем десять по копейке.
Половина посетителей этого форума по-моему, так и не перешагнула этот возрастной рубеж.
Умрусь, но сделаю все одним запросом! Это же цель жизни и святой грааль программиста.
Идеальный похапе скрипт - это тот, который выводит ВЕСЬ контент, от баннеров до статьи одним запросом. С помощью UNION это сделать вполне реально. Ведь гравная цель похаписта - это не скорость работы сайта, а количество запросов, ***
кто-нибудь, купите Ф*нату перо и бумагу, мысли отца русского пхп не должны пропасть всуе.
 

jonjonson

Охренеть
pilot911, и? На самом деле впихнут в один запрос, а потом парсят в цикле на десяток массивов. Сам увлекался...
 

Фанат

oncle terrible
Команда форума
Это комментарий, скорее, к стилю, чем к сути, я думаю
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Одним запросом, бгыгыгы:
Код:
SELECT centre.id_article, images.* 
FROM images 
INNER JOIN centre
ON images.id_image = centre.id_image 
WHERE centre.id_article = 10
limit 3
union all
SELECT centre.id_article, images.* 
FROM images 
INNER JOIN centre
ON images.id_image = centre.id_image 
WHERE centre.id_article = 8
limit 3
union all
SELECT centre.id_article, images.* 
FROM images 
INNER JOIN centre
ON images.id_image = centre.id_image 
WHERE centre.id_article = 7
limit 3
 

jonjonson

Охренеть
Роман, в начале думаешь как одним запросом максимум всего извлечь. Потом структуру БД под это подгоняешь или то что уже на ваял. И наконец результат запроса магически разбираешь. Не стиль. Говнооптимизация, блин.

Стиль - это когда связанные грамотно по логике таблицы спроектировал и результат выборки парсишь на куски для удобного вывода.
 
Сверху