我在PHP中运行以下MySQL查询。MySQL查询 - 连接两个表,产生重复结果
"SELECT *
FROM `challenges`,`verifications`
WHERE (`challenges`.`user_id`='".$this->record['id']."' OR `challenges`.`opponent_id`='".$this->record['id']."')
AND `challenges`.`is_verified`='0'
AND (`challenges`.`status`='in-progress' OR `challenges`.`status`='pending')
AND
(
(`verifications`.`user_id`='".$this->record['id']."' OR `verifications`.`opponent_id`='".$this->record['id']."')
AND (`verifications`.`user_verified`!=NULL AND `verifications`.`opponent_verified`=NULL)
)
LIMIT 100";
此查询由于某种原因返回重复记录。如果有人有任何见解,我将不胜感激。
下面是两个表(挑战和验证)的结构:
挑战表:
CREATE TABLE `challenges` (
`id` int(11) NOT NULL auto_increment,
`wager` int(11) NOT NULL,
`type` varchar(255) NOT NULL,
`user_id` int(11) NOT NULL,
`opponent_id` int(11) NOT NULL,
`start_date` date NOT NULL,
`date_created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`start_time` time NOT NULL,
`is_verified` tinyint(1) NOT NULL default '0',
`status` varchar(255) NOT NULL default 'pending',
`winner_id` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
考证表:
CREATE TABLE `verify` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`opponent_id` int(11) NOT NULL,
`challenge_id` int(11) NOT NULL,
`user_verified` int(11) default NULL,
`opponent_verified` int(11) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `challenge_id` (`challenge_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;
感谢您的帮助,如果你需要更多的信息,请让我知道。
您应该避免使用'SELECT *'(使用列列表)并使用隐式联接,因为它们都是不好的练习。 – Kermit
@njk你为什么认为'选择*'不好的做法? –
该查询值得正确格式化。 –