2012-01-09 148 views
3

我想知道如何限制輸出的id_offers數量而不是行數。例如限制 - mysql查詢

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 

編輯:在這種情況下,只應該算作6個報價。

+0

你在某處有需要的獨特之處。不太能夠跟隨你的領域名稱和他們的關係,所以我不能提供在哪裏。 – lhagemann 2012-01-09 15:41:07

+0

'state'屬於哪個表? – 2012-01-11 23:11:57

+0

它屬於報價表。謝謝 – anvd 2012-01-11 23:15:42

回答

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 offer and another issue:這個版本的MySQL還不支持'LIMIT&IN/ALL/ANY/SOME子查詢' – anvd 2012-01-11 22:32:25

+0

我忘了MySQL不允許在子查詢中使用LIMIT。轉換爲連接(如我的更新答案)可能會解決問題。並且s/UNIQUE/DISTINCT/ – bhamby 2012-01-11 22:37:26

+0

不幸的是沒有工作。它顯示所有優惠的標籤。 GROUP_CONCAT可能有助於統計id_offers的數量? – anvd 2012-01-11 22:45:58

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

我不知道提供的ID – anvd 2012-01-11 22:13:24

0

您只需使用DISTINCT:

SELECT DISTINCT A.id_offer,T.tags
從招募一個 INNER JOIN offer_has_tagsž 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