【发布时间】:2014-01-31 11:16:42
【问题描述】:
我制作了一些投票脚本,用户可以在其中投票赞成或反对某些答案。当我只有一个问题的答案时,它工作正常。如果我对一个问题给出两个或多个答案,则会收到错误 subquery returns more than one row。
$rezultati = mysqli_query($con,"SELECT SUM(down) as down
FROM vote WHERE answerId =
(SELECT questionId FROM answers WHERE questionId = $id)");
while($row = mysqli_fetch_array($rezultati))
{
echo $row['down'];
}
mysqli_close($con);
?>
这是向上按钮,向下是类似的。 (我知道有更简单的方法可以做到这一点,但我是 php 新手..) 这是表格问题
CREATE TABLE IF NOT EXISTS `questions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`question` text NOT NULL,
`user` varchar(255) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
表答案
CREATE TABLE IF NOT EXISTS `answers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`answer` text COLLATE utf8_unicode_ci NOT NULL,
`questionId` int(11) NOT NULL,
`user` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
表投票
CREATE TABLE IF NOT EXISTS `vote` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(50) NOT NULL,
`answerId` int(11) NOT NULL,
`up` int(11) NOT NULL,
`down` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
问题出在哪里?如何解决?谢谢!!
【问题讨论】:
-
"IN" 会为您解决这个问题 - 但它不会真正触及问题的核心
-
我认为你应该使用 IN 。 SELECT SUM(down) as down FROM vote WHERE answerId IN (SELECT answerId FROM answers WHERE questionId = $id)
-
你需要 answerId 而不是问题 ID 对吗?
-
如果我把 IN 然后我得到这个 'mysqli_fetch_array() 期望参数 1 是 mysqli_result,布尔值在 C:\wamp\www\mysite\up.php 第 11 行给出...