2011-02-27 86 views
1
SELECT 
    deal.*, 
    site.name AS site_name 
FROM deal 
INNER JOIN site ON site.id = site_id 
WHERE site_id IN (2, 3, 4, 5, 6) 
GROUP BY deal.id DESC, site_id 
LIMIT 5 

這個查詢的偉大工程,除了它的拉動重複site_ids ....選擇重複SITE_ID的

我一直沒能解決這個問題,這個查詢無法正常工作或:

SELECT DISTINCT 
    site.name AS site_name, 
    site.woot_off, 
    woot_deal.* 
FROM site 
INNER JOIN woot_deal ON woot_deal.site_id = site.id 
WHERE site_id IN (2, 3, 4, 5, 6) 
GROUP BY woot_deal.id DESC, site_id 
LIMIT 5 

每個網站都有很多交易,但我只想要最新的每筆交易。此查詢正在拉動屬於同一站點的5個角色中的3個。

+0

你的表結構的一些信息將有助於? – amitchd 2011-02-27 05:35:22

+0

我假設您的網站和交易之間的關係將是一對多。在這種情況下,它是完美的,它會得到重複的site_ids。 – amitchd 2011-02-27 05:36:14

+0

這意味着每個網站都必須有多筆交易,如果是這種情況,並且您只想要返回一筆交易,則需要提供一些方法告知您要返回的DB _which_交易,無論是在何處或有條款 – tobyodavies 2011-02-27 05:41:54

回答

5
select 
    deal.*, 
    site.name AS site_name 
from (
    SELECT max(deal.id) as deal_id, site_id 
    FROM deal 
    INNER JOIN site ON site.id = deal.site_id 
    WHERE site.id IN (2, 3, 4, 5, 6) 
    GROUP BY site.id 
) last_deals 
inner join site on site.id = last_deals.site_id 
inner join deal on deal.id = last_deals.deal_id 
LIMIT 5 
0

上一個答案似乎是通過與子查詢創建匿名錶複雜得多。除非我錯過了一個簡單的功能組應該做的竅門:

mysql> select * from site; 
+----+------------+ 
| id | name  | 
+----+------------+ 
| 1 | lameone | 
| 2 | anotherone | 
+----+------------+ 
2 rows in set (0.00 sec) 

mysql> select * from deal; 
+----+---------+-------+-------+ 
| id | site_id | name | value | 
+----+---------+-------+-------+ 
| 1 |  1 | best | 10 | 
| 2 |  1 | worst |  1 | 
| 3 |  2 | best | 10 | 
| 4 |  2 | worst |  1 | 
+----+---------+-------+-------+ 
4 rows in set (0.00 sec) 

    mysql>\p 
-------------- 
select s.name site 
    , d.name 
    , max(d.value) value 
    from deal d 
    , site s 
where s.id = d.site_id 
group by s.id 
order by 1,2,3 

-------------- 

    -> \g 
+------------+------+-------+ 
| site  | name | value | 
+------------+------+-------+ 
| anotherone | best | 10 | 
| lameone | best | 10 | 
+------------+------+-------+ 
2 rows in set (0.00 sec)