2010-06-07 193 views
5

我需要一些MySQL查詢的幫助。我有兩張桌子,一張是優惠券,一張是優惠券。優惠可以有一個或多個狀態。我想要做的是獲得所有優惠和最新狀態。對於每種狀態,都有一個名爲'added'的表字段,可用於排序。SQL查詢需要一些幫助

我知道這可以用兩個查詢很容易地完成,但我需要使它只有一個,因爲我也必須稍後在項目中應用一些過濾器。

這裏是我的設置:

CREATE TABLE `test`.`offers` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`client` TEXT NOT NULL , 
`products` TEXT NOT NULL , 
`contact` TEXT NOT NULL 
) ENGINE = MYISAM ; 

CREATE TABLE `statuses` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`offer_id` int(11) NOT NULL, 
`options` text NOT NULL, 
`deadline` date NOT NULL, 
`added` datetime NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

回答

2

應該工作,但不是很恕我直言最佳:

SELECT * 
FROM offers 
INNER JOIN statuses ON (statuses.offer_id = offers.id 
    AND statuses.id = 
      (SELECT allStatuses.id 
      FROM statuses allStatuses 
      WHERE allStatuses.offer_id = offers.id 
      ORDER BY allStatuses.added DESC LIMIT 1)) 
+0

是的,它的工作原理。謝謝!我不知道我可以在ON()中編寫額外的代碼。 – Psyche 2010-06-07 11:54:51

0

試試這個:

SELECT 
o.* 
FROM offers o 
INNER JOIN statuses s ON o.id = s.offer_id 
ORDER BY s.added 
LIMIT 1