2010-06-07 41 views
5

Tôi cần trợ giúp về truy vấn MySQL. Tôi có hai bảng, một bảng với phiếu mua hàng và một bảng có trạng thái. Phiếu mua hàng có thể có một hoặc nhiều trạng thái. Những gì tôi muốn làm là nhận được tất cả các đề nghị và tình trạng mới nhất của họ. Đối với mỗi trạng thái có một trường bảng có tên 'đã thêm' có thể được sử dụng để sắp xếp.Một số trợ giúp cần thiết với truy vấn SQL

Tôi biết điều này có thể dễ dàng thực hiện với hai truy vấn, nhưng tôi cần phải thực hiện nó chỉ với một truy vấn vì tôi cũng phải áp dụng một số bộ lọc sau này trong dự án.

Đây là thiết lập của tôi:

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 

Trả lời

2

nên làm việc nhưng IMHO không phải là rất tối ưu:

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

Vâng, nó hoạt động. Cảm ơn bạn! Tôi không biết tôi có thể viết mã bổ sung trong ON(). – Psyche

0

Hãy thử điều này:

SELECT 
o.* 
FROM offers o 
INNER JOIN statuses s ON o.id = s.offer_id 
ORDER BY s.added 
LIMIT 1 
Các vấn đề liên quan