Przejdę od razu do konkretów. Próbuje pobrać najmniejszą kwotę (cenę) oraz liczbę dni przypisaną według danego sklepu. Ogólnie prawidłowo pobiera najniższą cenę, funkcja MIN() spełnia swoje założenia, ale pozostała część zapytania (tj: pobieranie dni, oraz id) - zwraca w ogóle inne, dziwne wartości, które nie należą do rekordu z najniższą ceną.
Zapytanie, które wykonuje:
SELECT min(price) AS malo, days, id FROM `cennik` WHERE sklep_id = 2;
Wynik:
malo: 170 (dobrze),
days: 1,
id: 1
Pobiera najniższy wynik, ale później zapytanie pobiera pierwszy z brzegu rekord i zwraca mi dni: 1, id: 1 - a powinno zwrócić: 7 dni oraz id: 9.
Ktoś wie dlaczego tak się dzieje? Poniżej przedstawiam schemat tabeli wraz z danymi, na których operuje.
CREATE TABLE IF NOT EXISTS `cennik` ( `id` int(11) NOT NULL AUTO_INCREMENT, `sklep_id` int(11) NOT NULL, `days` int(11) NOT NULL, `price` decimal(16,2) NOT NULL DEFAULT '0.00', PRIMARY KEY (`id`), KEY `sklep_id` (`sklep_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=11 ; INSERT INTO `cennik` (`id`, `sklep_id`, `days`, `price`) VALUES (1, 2, 1, 200.00), (2, 2, 2, 190.00), (3, 2, 3, 190.00), (4, 2, 4, 180.00), (5, 2, 5, 180.00), (6, 2, 6, 180.00), (9, 2, 7, 170.00), (10, 6, 1, 150.00);