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 WHEREanstelle 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 WHERETeil geht nicht false. Gibt es jemanden, der dies erklären und Licht ins Dunkel bringen könnte?
using indexin extra stattimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;zurück ???