Hallo allemaal.

Ik ben bezig met een multi-poll systeem te maken, maar een WHERE clausule, die het aantal stemmen op een bepaalde keuze zou moeten tellen, geeft altijd maar 1 record terug, terwijl er toch meerdere zijn.

Hier is het stukje code:


$sql_get_voted = "SELECT * FROM poll_votes WHERE poll_id = ".$voted_ids[$i]." AND vote_number = ".$poll_choices['id'];;
$sql_get_total_voted = "SELECT * FROM poll_votes WHERE poll_id = ".$voted_ids[$i];
										
if($query_count = mysql_query($sql_get_voted) && $query_total = mysql_query($sql_get_total_voted))
{
        //dit is de regel waar het om gaat:
        $count = mysql_num_rows($query_count); 
        $total = mysql_num_rows($query_total);

	$percent = $count/$total;
	echo $poll_choices['poll_choice'];
	?>
	<div class="count_bar" style="width: <?= $percent*100 ?>px">
		<?= round($percent*100) ?>%
	</div>
	<?php
}


Ik krijg bij de code hierboven op de regel die ik heb aangegeven een foutmelding, dat $query_count geen geldige "result resource" is.

Toed had ik i.p.v een variabele te gebruiken, mysql_query() in mysql_num_rows() gezet, zoals hieronder te zien is


$sql_get_voted = "SELECT * FROM poll_votes WHERE poll_id = ".$voted_ids[$i]." AND vote_number = ".$poll_choices['id'];;
$sql_get_total_voted = "SELECT * FROM poll_votes WHERE poll_id = ".$voted_ids[$i];
						
//de regel waar het om gaat is de eerste test in de if: "$count ..."				
if($count = mysql_num_rows(mysql_query($sql_get_voted)) && $total = mysql_num_rows(mysql_query($sql_get_total_voted)))
{
	$percent = $count/$total;
	echo $poll_choices['poll_choice'];
	?>
	<div class="count_bar" style="width: <?= $percent*100 ?>px">
		<?= round($percent*100) ?>%
	</div>
	<?php
}


Met de code hierboven krijg ik niet de foutmelding over de "result resource", maar mysql_num_rows() geeft altijd maar 1 record terug, terwijl er toch meerdere records (stemmen) op 1 keuze zijn.

ziet iemand wat ik fout doe?
Yep, een prima datatype. En dan hoef je een nummer dus echt niet tussen 'quotes' te zetten, dat kan onmogelijk de oplossing zijn geweest voor jouw probleem.

MySQL is een rare database en vertoont regelmatig zeer bijzonder gedrag, maar een integer heeft nog steeds geen quotes nodig. Gelukkig niet!

Edit: En echo die queries nu eens! Dan zie je eindelijk wat je nu daadwerkelijk verstuurt naar de database.
pgFrank schreef op 22.03.2008 11:32
MySQL is een rare database en vertoont regelmatig zeer bijzonder gedrag, maar een integer heeft nog steeds geen quotes nodig. Gelukkig niet!
Dat wordt de nieuwe 'functionliteit' van MySQL 7.0: wel quotes rond integers en niet meer rond strings :-)
Onzin! Integers hoef je nog steeds niet tussen quotes te plaatsen in SQL! Dit is gewoon een prima query (...)


Yep, een prima datatype. En dan hoef je een nummer dus echt niet tussen 'quotes' te zetten, dat kan onmogelijk de oplossing zijn geweest voor jouw probleem.


Hoe willen jullie dan verklaren dat mijn oplossing de oplossing is? :)
Zou het kunnen zijn dat er nog 1000-en-1 andere oorzaken en dus ook oplossingen mogelijk zijn? Jij weet zelf ook wel dat integers niet tussen quotes hoeven, dat is niets nieuws onder de zon. Die quotes kunnen alleen maar een probleem oplossen wanneer de zogenaamde integer geen integer is.
Fout van de TS bij het overnemen van eerder gegeven voorbeelden? De quotes zijn in ieder geval niet de oplossing, verwijder ze maar dan zul je zien dat het nog steeds werkt...

ps. Natuurlijk ervan uitgaande dat poll_id en die variabele beide integers zijn.
@frank: ik heb er al een neergezet, kijk nog maar ff in mijn posts

@iedereen: waarom naar een oorzaak zoeken als hij al werkt?!?
Maarten schreef op 22.03.2008 12:40
@iedereen: waarom naar een oorzaak zoeken als hij al werkt?!?
Lijkt me vrij logisch. Omdat je wilt weten waarom iets fout gegaan is zodat je dat in de toekomst kunt voorkomen. Misschien heb je het nu zelfs wel met een lapmiddel aan de praat gekregen dat je later nog veel grotere problemen gaat opleveren!

Kortom, pas als je echt weet waarom het fout gegaan is, kun je bepalen of de oplossing die je nu gebruikt hebt de juiste is...
Maarten schreef op 22.03.2008 12:40
@iedereen: waarom naar een oorzaak zoeken als hij al werkt?!?
Op naar de volgende bug!

good luck.
maar ja, ik weet het niet, dat is de reden dat ik dit topic heb geplaatst.

ik heb jullie al alles gegeven waar jullie om hebben gevraagd en toch doe ik nog iets niet goed, dus om alles maar samen te krijgen:


<?php
//het aantal keer dat op deze keuze is gestemd
$sql_get_voted = "SELECT COUNT(id) AS aantal 
				  FROM poll_votes 
				  WHERE vote_number = '".$poll_choices['id']."'";
				  
//het totaal aantal stemmen
$sql_get_total_voted = "SELECT COUNT(id) AS aantal
						FROM poll_votes 
						WHERE poll_id = '".$voted_ids[$i]."'";

if($query_count = mysql_query($sql_get_voted))
{
 	if($query_total = mysql_query($sql_get_total_voted))
 	{
	 	$result_count = mysql_fetch_array($query_count);
	 	$result_total = mysql_fetch_array($query_total);
	 	
	 	//bereken het percentage voor deze keuze (deel/geheel)
	 	$percent = $result_count['aantal']/$result_total['aantal'];
	 	
	 	//naam van de keuze
	 	echo $poll_choices['poll_choice'];
	 	?>
	 	<!-- balk die het relatieve aantal stemmen laat zien doormiddel van breedte -->
		<div class="count_bar" style="width: <?= $percent*100 ?>px">
			<?= round($percent*100) ?>%
		</div>
		
		<!-- het totaal aantal stemmen -->
		<span class="total_votes">
			<?= $result_total['aantal'] ?>
		</span>
	 	<?php
	}
	else
	{
		echo '<span class="error">Er is een fout opgetreden met het tellen van het totaal aantal stemmen. Excuses voor het ongemak </span>';
	}
}
else
{
	echo '<span class="error">Er is een fout opgetreden met het tellen van het aantal stemmen. Excuses voor het ongemak</span>';
}						
?>


de sql queries:

SELECT COUNT(id) AS aantal FROM poll_votes WHERE vote_number = '1'
SELECT COUNT(id) AS aantal FROM poll_votes WHERE poll_id = '1'


als er nog iets bij moet zeg het maar, edit ik deze post even
En wat gaat er nu fout dan?

Reageren