2012-01-09 2 views
3

Я хотел бы знать, как я могу ограничить вывод количеством id_offers, а не количеством строк. Напримерlimit - mysql query

SELECT A.id_offer, T.tags 
      FROM offer A 
      INNER JOIN offer_has_tags Z 
      ON A.id_offer = Z.offer_id_offer 

      INNER JOIN tags T 
      ON Z.tags_id_tags = T.id_tags 

      WHERE state = 0 
      ORDER BY date 
      DESC LIMIT 0, 10 

выход:

id_offer tags 
    77  xx 
    76  xx 
    76  xx 
    75  xx 
    75  xx 
    74  xx 
    74  xx 
    73  xx 
    73  xx 
    72  xx 

Edit: Только в этом случае должно быть рассчитывать как 6 предложений.

+0

Вам нужен UNIQUE где-то там. Не совсем в состоянии следить за вашими именами полей и их отношениями, поэтому я не могу предложить, где. – lhagemann

+0

Какая таблица принадлежит государству? –

+0

Он принадлежит к таблице предложений. спасибо – anvd

ответ

2

Я не уверен, если это именно то, что вы хотите, но я думаю, что это:

SELECT A.id_offer, T.tags 
FROM offer A 
JOIN offer_has_tags Z 
    ON A.id_offer = Z.offer_id_offer 
JOIN tags T 
    ON Z.tags_id_tags = T.id_tags 
JOIN (
    SELECT DISTINCT id_offer 
    FROM offer 
    WHERE state = 0 
    ORDER BY date DESC 
    LIMIT 10 
) L 
    ON A.id_offer = L.id_offer 

или более просто:

SELECT A.id_offer, T.tags 
FROM 
    (SELECT * 
    FROM offer 
    WHERE state = 0 
    ORDER BY date DESC 
    LIMIT 10 
) A 
JOIN offer_has_tags Z 
    ON A.id_offer = Z.offer_id_offer 
JOIN tags T 
    ON Z.tags_id_tags = T.id_tags 
+0

Дайте мне синтаксическую ошибку в подзапросе: SELECT UNIQUE id_offer FROM предложение и еще одна проблема: эта версия MySQL еще не поддерживает «LIMIT & IN/ALL/ANY/SOME subquery ' – anvd

+0

Я забыл, что MySQL не разрешает 'LIMIT' в подзапросах. Преобразование в соединение (как в моем обновленном ответе) может решить проблему. И s/UNIQUE/DISTINCT/ – bhamby

+0

, к сожалению, не работает. Он показывает теги для всех предложений. GROUP_CONCAT может помочь подсчитать количество id_offers? – anvd

0

вы можете попробовать это:

SELECT A.id_offer, T.tags 
FROM offer A 
    INNER JOIN offer_has_tags Z 
     ON A.id_offer = Z.offer_id_offer 
    INNER JOIN tags T 
     ON Z.tags_id_tags = T.id_tags 

WHERE (state = 0) AND 
     (A.id_offer >= 72 AND A.id_offer <= 77) 
ORDER BY date 
+0

Я не знаю идентификатор предложений – anvd

0

Вам просто нужно использовать DISTINCT:

ВЫБРАТЬ DISTINCT A.id_offer, T.tags
ОТ предлагают INNER JOIN offer_has_tags Z ON A.id_offer = Z.offer_id_offer

 INNER JOIN tags T 
     ON Z.tags_id_tags = T.id_tags 

     WHERE state = 0 
     ORDER BY date 
     DESC LIMIT 0, 10