2010-06-07 6 views
5

Potrzebuję pomocy z zapytaniem MySQL. Mam dwie tabele, jedną z ofertami i jedną ze statusami. Oferta może mieć jeden lub więcej statusów. Chciałbym uzyskać wszystkie oferty i ich najnowszy status. Dla każdego statusu istnieje pole tabeli o nazwie "dodano", które może być użyte do sortowania.Potrzebna pomoc przy zapytaniu SQL

Wiem, że można to łatwo zrobić za pomocą dwóch zapytań, ale muszę zrobić to tylko z jednym, ponieważ muszę też zastosować filtry później w projekcie.

Oto moja konfiguracja:

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 

Odpowiedz

2

powinno działać, ale nie bardzo optymalna imho:

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

Tak, to działa. Dziękuję Ci! Nie wiedziałem, że mogę napisać dodatkowy kod w ON(). – Psyche

0

Spróbuj tego:

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