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.
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.
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.
@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...
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