2012-07-22 49 views
1

表報價查詢返回一個壞輸出

id_offer offer state  

600   A  0 
629   B  0 

標籤

id_tags  tags   

561   PHP 
562   JAVA 
589   MySQL 
917   python 

offer_has_tags

offer_id_offer  tags_id_tags 
600     561  
600     562 
600     917 
629     562 
629     589 
629     917 

我需要的輸出:

600  PHP 
600  JAVA 
600  python 
629  JAVA 
629  MySQL 
629  python 

我試圖(沒有成功):

SELECT A.id_offer, A.tags 
    FROM 
     (SELECT * 
     FROM offer 
     WHERE id_offer IN (600, 629) 
     AND state = 0 
     ORDER BY date_post DESC 
     LIMIT ?, ? 
    ) A, tags A 
    INNER JOIN offer_has_tags B 
     ON A.id_tags = B.tags_id_tags 
    INNER JOIN offer C 
     ON C.id_offer = B.offer_id_offer 
    GROUP BY id_tags 

任何想法?感謝

回答

2

試試這個

SELECT A.id_offer, t.tags 
from 
    (Select * from offer o 
    Where o.id_offer IN (600, 629) 
    AND o.State=0 
    ORDER BY ? DESC 
    Limit ?,?) A 
INNER JOIN offer_has_tags B 
    ON A.id_offer = B.offer_id_offer 
INNER JOIN tags t 
    ON b.tags_id_tags = t.id_tags 
+0

嗨,我忘了子查詢中的限制條款。現在我記得那是我使用子查詢的原因。 – user455318 2012-07-22 01:30:32

1

使用舊SQL風格的(但更容易理解,我認爲):

SELECT id_offer, tags.tags 
    FROM tags,offer_has_tags,offer 
    WHERE offer_id_offer = offer.id_offer 
    AND tags_id_tags = id_tags 
    AND id_offer IN (600, 629) 
    AND state = 0 
    GROUP BY id_offer, tags.tags 
    ORDER BY date_post DESC 

與LIMIT:

SELECT A.id_offer, tags.tags 
    FROM tags,(SELECT * 
       FROM offer 
       WHERE id_offer IN (600, 629) 
        AND state = 0 
       ORDER BY date_post DESC 
       LIMIT ?, ? 
      ) A,offer_has_tags 
    WHERE offer_id_offer = A.id_offer 
    AND tags_id_tags = id_tags 
    GROUP BY A.id_offer, tags.tags 
+0

請,我增加了新的細節。我忘記了限制條款。 – user455318 2012-07-22 01:31:11

+0

你能用限制條款說清楚嗎?哪種行? – hmmftg 2012-07-22 01:42:35

+0

,限制應該限制報價的數量,而不是標籤的數量。例如,「我希望3-5天之間的報價不變」,所以在這種情況下輸出應該是沒有的,因爲我只有兩個報價。 – user455318 2012-07-22 01:44:38