Я сделал несколько сценариев для голосования, где пользователь голосует вверх или вниз для некоторых ответов. Он отлично работает, когда у меня есть только один ответ на вопрос. Если я дам два или более ответов на один вопрос, у меня есть ошибка subquery returns more than one row
.После выбора суммы php и mysql дайте мне ошибку - в подзапросе возвращается более одной строки?
$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);
?>
Это кнопка UP, а для Down - аналогичная. (Я знаю, что есть проще способ сделать все это, но я новичок в 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» зафиксирует, что для вас, - но это не будет действительно добраться до сути проблемы – Strawberry
я думаю, вы должны использовать IN. SELECT SUM (вниз) как нисходящий ОТ голоса WHERE answerId IN (SELECT answerId FROM ответы WHERE questionId = $ id) – shanavascet
Вам нужно answerId вместо идентификатора вопроса правильно? – shanavascet