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

任何的想法?谢谢

4

2 回答 2

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
于 2012-07-22T01:13:13.193 回答
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

有限制:

 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
于 2012-07-22T01:02:43.417 回答