Tablodaki fr (fromid, toid) gibi benzersiz bir bileşik anahtarım var, sorguyu açıkladığımda aşağıdaki sonucu alıyorum:
Impossible WHERE noticed after reading const tables`
Çalıştırdığım sorgu:
explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60
Herhangi bir yardım?
EDIT1:
Aşağıdaki sorguyu kullandığımda:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t'
USING WHERE
Önceki ileti yerine görüyorum , ancak aşağıdaki sorguyu kullandığımda:
explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR is_approved='f' OR is_approved='t')
Yine ilk impossible ...
mesajı alıyorum! Bu parantezlerin burada ne işi var?
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:
MySQL sitesinde söylediği gibi:
İmkansız NEDEN const tabloları okuduktan sonra fark
MySQL tüm const (ve system) tablolarını okudu ve WHERE yan tümcesinin her zaman yanlış olduğunu fark etti.
Ancak sorguda istediğim sonucu alıyorum, WHERE
kısmı değil false
. Bunu açıklayabilecek ve konuyla ilgili biraz ışık tutabilecek biri var mı?
using index
yerine ekstra olacakimpossible...
SELECT COUNT(1) FROM relationship WHERE fromid=78 AND toid=60;
geri döner ???