Mam unikalny klucz złożony, taki jak fr (fromid, toid) w tabeli, kiedy uruchamiam zapytanie z wyjaśnieniem, otrzymuję następujący wynik:
Impossible WHERE noticed after reading const tables`
Zapytanie, które uruchomiłem:
explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60
Jakaś pomoc?
EDYCJA 1:
Kiedy używam poniższego zapytania:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t'
Widzę USING WHERE
zamiast poprzedniej wiadomości, ale kiedy używam poniższego zapytania:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR is_approved='f' OR is_approved='t')
Ponownie otrzymuję pierwszą impossible ...
wiadomość! Co robią te nawiasy?
EDYCJA 2:
CREATE TABLE `relationship` (
`rid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`fromid` mediumint(8) unsigned NOT NULL,
`toid` mediumint(8) unsigned NOT NULL,
`type` tinyint(3) unsigned NOT NULL,
`is_approved` char(1) NOT NULL,
PRIMARY KEY (`rid`),
UNIQUE KEY `fromid` (`fromid`,`toid`),
KEY `toid` (`toid`),
CONSTRAINT `relationship_ibfk_1` FOREIGN KEY (`fromid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `relationship_ibfk_2` FOREIGN KEY (`toid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB
EDYCJA 3:
Jak mówią witryny mysql:
Niemożliwe GDZIE zauważono po odczytaniu tabel stałych
MySQL odczytał wszystkie tabele const (i systemowe) i zauważył, że klauzula WHERE jest zawsze fałszywa.
Ale w zapytaniu otrzymuję wynik, którego chcę, WHERE
część nie false
. Czy jest ktoś, kto mógłby to wyjaśnić i rzucić nieco światła na ten temat?
using index
dodatkowe zamiastimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
zwraca?