[MySql] - Abfrage

Online-Skater

Erfahrenes Mitglied
Hallo hab ein Problem woran ich mich schon länger versuche. Es geht um einen Vote, den man einem Thread anhängen kann. Konkret suche ich nun die Frage und die gesamten Antworten(Votes)

Code:
ds_vote (
	`vid` INT(10) NOT NULL auto_increment,
	`pid` INT(14) NOT NULL,
	`frage` VARCHAR(150) NOT NULL,
	PRIMARY KEY (`vid`)
);
ds_vote_answer (
	`aid` INT(11) NOT NULL auto_increment,
	`vid` INT(10) NOT NULL,
	`answer` VARCHAR(50) NOT NULL,
	PRIMARY KEY (`aid`)
);
ds_vote_hits (
	`id` INT(12) NOT NULL auto_increment,
	`aid` INT(11) NOT NULL,
	`uid` SMALLINT(4) NOT NULL,
	PRIMARY KEY (`id`)
);

Wenn schon einer gevoted hat funktioniert folgendes, da die Bedingungen erfüllt sind
Code:
SELECT `a`.`vid` , `a`.`frage` , COUNT( `c`.`id` ) AS `num`
FROM `ds_vote` AS `a`
INNER JOIN `ds_vote_answer` AS `b`
USING ( `vid` )
INNER JOIN `ds_vote_hits` AS `c`
USING ( `aid` )
WHERE `a`.`pid` = '7'
GROUP BY `a`.`vid` , `c`.`aid`
LIMIT 0 , 30

oder

SELECT `a`.`vid` , `a`.`frage` , COUNT( `c`.`id` ) AS `num`
FROM `ds_vote` AS `a`
INNER JOIN `ds_vote_answer` AS `b`
USING ( `vid` )
RIGHT OUTER JOIN `ds_vote_hits` AS `c`
USING ( `aid` )
WHERE `a`.`pid` = '7'
GROUP BY `a`.`vid` , `c`.`aid`
LIMIT 0 , 30

Wenn kein Vote abgegeben ist:
Code:
SELECT `a`.`vid` , `a`.`frage` , COUNT( `c`.`id` ) AS `num`
FROM `ds_vote` AS `a`
INNER JOIN `ds_vote_answer` AS `b`
USING ( `vid` )
LEFT OUTER JOIN `ds_vote_hits` AS `c`
USING ( `aid` )
WHERE `a`.`pid` = '7'
GROUP BY `a`.`vid` , `c`.`aid`
LIMIT 0 , 30

Das Problem ist ich brauche eine Abfrage die mir die Anzahl der Stimmen eines Votes liefert wenn gevotet wurde (>0) und wenn noch nicht gevotet wurde(=0). Das geht bei diesen Beispielen nicht.
Beim letzten Beispiel gibt er mir 2 Datensätze aus, wobei der 2te richtig ist aber das ist eine unsaubere Lösung (ORDER BY num DESC LIMIT 1) :confused: ...
Code:
 vid   	  frage   	       num
  3 	Welche Farbe ? 	  0
  3 	Welche Farbe ? 	  1

Warum ?

Danke im Vorraus
 
Es lag an der falschen Gruppierung...
Folgendes funktioniert reibungslos.
Code:
SELECT `a`.`vid` , `a`.`frage` , COUNT( `c`.`id` ) AS `num`
FROM `ds_vote` AS `a`
LEFT JOIN `ds_vote_answer` AS `b`
USING ( `vid` )
LEFT JOIN `ds_vote_hits` AS `c`
USING ( `aid` )
WHERE `a`.`pid` = '$v_pid'
GROUP BY `a`.`vid`;
 

Neue Beiträge

Zurück