Oh, yeah, this is really supprise me. But my real tables aren't like that. There are more stuffs but it should be the same as I assume:
CREATE TABLE message (
msgid mediumint(3) unsigned NOT NULL auto_increment,
datetime varchar(10) NOT NULL default '',
fromuserid mediumint(3) unsigned NOT NULL default '0',
touserid mediumint(3) unsigned NOT NULL default '0',
content mediumtext NOT NULL,
topicid mediumint(3) unsigned NOT NULL default '0',
attachids varchar(50) default NULL,
fromusername varchar(50) default NULL,
tousername varchar(50) default NULL,
toreplyid mediumint(3) unsigned NOT NULL default '0',
replyid mediumint(3) unsigned NOT NULL default '1',
editlog varchar(16) default NULL,
msgrate tinyint(1) unsigned NOT NULL default '0',
enablehtml enum('y','n') NOT NULL default 'n',
signature enum('y','n') NOT NULL default 'y',
notify enum('y','n') NOT NULL default 'n',
showsmilies enum('y','n') NOT NULL default 'y',
parselink enum('y','n') NOT NULL default 'y',
PRIMARY KEY (msgid)
) TYPE=MyISAM;
#
Dumping data for table 'message'
#
INSERT INTO message VALUES("13", "1047778690", "2", "0", "test", "31", "5|||6", "", "{toguestusername}", "1", "2", "1|||1047778690", "0", "n", "n", "n", "y", "y");
INSERT INTO message VALUES("14", "1047785611", "1", "0", "test", "31", "8", "", "{toguestusername}", "2", "3", "1|||1047785611", "0", "n", "n", "n", "y", "y");
#
Table structure for table 'ratelog'
#
CREATE TABLE ratelog (
userid mediumint(3) unsigned NOT NULL default '0',
raterid tinyint(1) unsigned NOT NULL default '0',
msgid mediumint(3) unsigned NOT NULL default '0',
pollid mediumint(3) unsigned NOT NULL default '0',
rate tinyint(1) unsigned NOT NULL default '0',
datetime varchar(10) NOT NULL default '',
KEY msgpoll (msgid,pollid),
KEY raterid (raterid),
KEY userid (userid),
KEY userrater (raterid,userid),
KEY msgid (msgid),
KEY pollid (pollid)
) TYPE=MyISAM;
#
Dumping data for table 'ratelog'
#
INSERT INTO ratelog VALUES("2", "1", "13", "0", "2", "");
INSERT INTO ratelog VALUES("2", "1", "13", "22", "3", "");
SQL:
select message.*, ratelog.rate from message left join ratelog
on ratelog.userid=message.fromuserid AND ratelog.raterid=1 AND ratelog.msgid=message.msgid
where topicid=31;
The above sql statement return 3 records which two of them has msgid=13. What's wrong?