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?
Je hebt wel gezegd welke query er fout gaat, maar nog steeds niet waarom die nu fout gaat. Die 'not a valid result resource' foutmelding komt van een andere functie (zoals bv mysql_num_rows of mysql_fetch_assoc), niet van je mysql_query.

Pas dus die foutafhandeling toe en echo de SQL foutmelding (te achterhalen met mysql_error()) als blijkt dat de query niet gelukt is. Daar heb je veel meer aan en pas dan kun je verder debuggen...
maar mysql_num_rows() geeft altijd maar 1 record terug, terwijl er toch meerdere records (stemmen) op 1 keuze zijn.
Sterker nog, mysql_num_rows() geeft helemaal geen records terug! Het vertelt je hoeveel records er in de resultset staan. Met deze resultset doe jij overigens niets, maar dat is al vaker gezegd, zie je vorige topic over dit zelfde onderwerp.
ik vraag nou net wat er fout gaat, omdat ik daar niet achter kan komen.

het gaat mij ook helemaal niet om de mysql_query, maar om die mysql_num_rows die het niet doet (dat staat toch echt in de eerste post)
Values moeten altijd aangegeven worden als values. Er moeten dus altijd enkele/dubbele quotes omheen. Als die quotes er niet staan, denkt SQL dat de value een veld is, en gaat op zoek naar dit veld - wat hoogstwaarschijnlijk niet bestaat. Dus:

<?php
$sQuery = "
SELECT
COUNT(*) AS aantal
FROM
poll_votes
WHERE
poll_id = '".$voted_ids[$i]."'";

if(!$rResult = mysql_query($sQuery))
{
trigger_error(mysql_error().'<br />In query: '.$sQuery);
}
else
{
$aRow = mysql_fetch_assoc($rResult);
echo $aRow['aantal'];
}
?>
ok, fijne mysql tutorial die ik had, hij zei dat getallen niet tussen quotes hoefde, maar nu werkt hij wel...

bedankt in ieder geval!
Er is een fout opgetreden...

Dan zijn de betere foutmeldingen! Heb je toch minstens 10x niks aan wanneer je moet debuggen. Wat is er mis met mysql_error() ? Tijdens bouwen, testen en debuggen is deze onmisbaar. Wanneer dit mist in jouw code, weet je dat je fout bezig bent.
Maarten schreef op 22.03.2008 11:18
ok, fijne mysql tutorial die ik had, hij zei dat getallen niet tussen quotes hoefde, maar nu werkt hij wel...

bedankt in ieder geval!
Getallen hoef je inderdaad niet tussen quotes te zetten, maar onthou wel dat één en twee geen getallen zijn. 1 en 2 zijn echter wel weer getallen, integers om precies te zijn.

Echo de query eens, hoe ziet jouw query er nu uit?

Edit: Dat had ook in 1 reactie gekund...
Als hij nu met quotes wél werkt, vraag ik me af welk veldtype poll_id is?
Values moeten altijd aangegeven worden als values. Er moeten dus altijd enkele/dubbele quotes omheen. Als die quotes er niet staan, denkt SQL dat de value een veld is, en gaat op zoek naar dit veld - wat hoogstwaarschijnlijk niet bestaat.
Onzin! Integers hoef je nog steeds niet tussen quotes te plaatsen in SQL! Dit is gewoon een prima query:

SELECT *
FROM tabel
WHERE id = 10

Dat het gebruik van quotes wel mag rond integers is iets anders, maar het is zeker niet verplicht! Strings daarentegen zijn natuurlijk wel weer een ander verhaal, daar zijn (net als in PHP) de enkele quotes verplicht...
het velt type van poll_id en van vote_number is allebei int(11), dat moet het toch zijn?

Reageren