2014-01-31 3 views
0

Я сделал несколько сценариев для голосования, где пользователь голосует вверх или вниз для некоторых ответов. Он отлично работает, когда у меня есть только один ответ на вопрос. Если я дам два или более ответов на один вопрос, у меня есть ошибка 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 ; 

В чем проблема? Как это исправить? Спасибо!!

+0

«IN» зафиксирует, что для вас, - но это не будет действительно добраться до сути проблемы – Strawberry

+1

я думаю, вы должны использовать IN. SELECT SUM (вниз) как нисходящий ОТ голоса WHERE answerId IN (SELECT answerId FROM ответы WHERE questionId = $ id) – shanavascet

+0

Вам нужно answerId вместо идентификатора вопроса правильно? – shanavascet

ответ

0

С вашего вопроса Я понимаю, что вы хотите перечислить все поданные голоса по определенному вопросу. Затем, если вы обновляете столбцы up и down в таблице answers, запрос прост.

"SELECT SUM(down) as down 
FROM answers WHERE questionId = $id)" 
+0

Если я это сделаю, каждый ответ имеет такое же количество голосов или голосующих кликов ... – bobouch

 Смежные вопросы

  • Нет связанных вопросов^_^