Ich habe einen eindeutigen zusammengesetzten Schlüssel wie fr (fromid, toid) in der Tabelle, wenn ich die Abfrage mit EXPLAIN ausführe, erhalte ich das folgende Ergebnis:
Impossible WHERE noticed after reading const tables`
Die Abfrage, die ich ausgeführt habe:
explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60
Irgendeine Hilfe?
EDIT1:
Wenn ich die folgende Abfrage verwende:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t'
Ich sehe USING WHERE
anstelle der vorherigen Nachricht, aber wenn ich die folgende Abfrage verwende:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR is_approved='f' OR is_approved='t')
Ich bekomme wieder das erste impossible ...
Nachricht! Was machen diese Klammern hier?
EDIT2:
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
EDIT3:
Wie MySQL-Site sagt:
Unmöglich, wo nach dem Lesen von const-Tabellen bemerkt
MySQL hat alle const-Tabellen (und Systemtabellen) gelesen und festgestellt, dass die WHERE-Klausel immer falsch ist.
Aber bei der Abfrage bekomme ich das gewünschte Ergebnis, das WHERE
Teil geht nicht false
. Gibt es jemanden, der dies erklären und Licht ins Dunkel bringen könnte?
using index
in extra stattimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
zurück ???