hallo ik heb hier een script voor stats

<?php
include("conn.php");
$dbres = mysql_query("SELECT name FROM phpmylogon");
$sql = mysql_num_rows($dbres);
$admin1 = mysql_query("SELECT name FROM phpmylogon WHERE state='1'");
$admin = mysql_num_rows($admin1);
$dj1 = mysql_query("SELECT name FROM phpmylogon WHERE dj='1'");
$dj = mysql_num_rows($dj1);
$block1 = mysql_query("SELECT name FROM phpmylogon WHERE block='1'");
$block = mysql_num_rows($block1);
?>
<table width="800"><td></td></table>
<table width="100%" border="1" align="center">
<tr>
<td align="center">Aantal Leden:</td>
<td align="center">Aantal Admins:</td>
<td align="center">Aantal Dj`s:</td>
<td align="center">Aantal gebanned:</td>
</tr>
<tr>
<td align="center"><?php echo $sql ?></td>
<td align="center"><?php echo $admin ?></td>
<td align="center"><?php echo $dj ?></td>
<td align="center"><?php echo $block ?></td>
</tr>
</table>

als ik hem aanroep dan zegt hij leden 4
admins 2 en dj's 3.
dit klopt niet want dan zouden er 5 leden moeten zijn.
in de db heb ik staan als state en dj
dus bijvoorbeeld thomas heeft de status admin maar ook dj
en die telt hij bij elkaar op.
hoe kan ik dit vermijden zodat als status admin en dj bij een en dezelfde lid hoort.
alvast bedankt voor de tips.
hij telt resultaten over de voorgaande (result) query...
Dus nee telt niks op inderdaad...

je kan zoiets doen:
<?php
$sql = "SELECT COUNT(1) as total,
name
FROM phpmylogon
WHERE state=1
AND dj=1
AND block=1";
$res = mysql_query($sql);
if(!$res){
echo 'error: [#'.mysql_errno().'] '.mysql_error().'<br/>'.PHP_EOL;
}
else{
while($rec = mysql_fetch_assoc($res)){
if(isset($rec['state']) && $rec['state'] == 1){
echo '___state___:<br/>'.PHP_EOL;
}
if(isset($rec['dj']) && $rec['db'] == 1){
echo '___dj___:<br/>'.PHP_EOL;
}
if(isset($rec['block']) && $rec['block'] == 1){
echo '___block___:<br/>'.PHP_EOL;
}
echo 'name: '.$rec['name'].'<br/>'.PHP_EOL;
}
//dump array:
echo 'total: '.$rec['total'].'<br/>'.PHP_EOL;
echo 'result: <pre>'.print_r($rec).'</pre>'.PHP_EOL;
}
?>

maar dan splits je het op in php...
Thomas, het kan in 1 query met met cases maar dat miss iets te ingewikkeld nog.

Je kunt ook met array_search door PHP laten tellen hoeveel matches er zijn in je (totale) resultset. Ik weer niet precies of array_search ook de keys checked, maar:
<?
$query = "blaaa";
$result = mysql_query($query);
if ( mysql_num_rows($result) ) {
$poppetjes = array(); # Ik weet het ;)
while ( $record = mysql_fetch_assoc($result) ) {
$poppetjes[$record['sleutelveld']] = $record;
}
} else {
print 'Geen poppetjes';
}

?>

en dan tellen ..

<?
$djs = 0; # I know
$ijskomannen = 0; # I still know
foreach ( $poppetjes as $poppetje ) {
if ( $poppetje['dj'] == 1 ) {
$djs++;
}
if ( $poppetje['ijscoman'] == 1 ) {
$ijskomannen++;
}
}

?>

en dan

<?
printf("Totaal zijn er maarliefs %d.",$ijskomannen);
?>

( Tis voor een idee )
Probeer trouwens wat betere variabelnamen te hanteren en integers hoef je niet te kwooten
@Thomas: ik zou nog eens goed naar je datamodel kijken, want het lijkt erop dat daar een grote fout in zit. Zoals je je queries nu opstelt lijkt het mij dat je verschillende kolommen gebruikt voor verschillende statussen die een gebruiker kan hebben. Dit is niet juist...

Die statussen hoor je op te slaan in een aparte tabel en aangezien een gebruiker meerdere statussen kan hebben, gebruik je een koppeltabel om de statussen aan een gebruiker te koppelen. Dit volgt allemaal vanzelf als je gaat normaliseren.

Verder wordt het berekenen van de statistieken die jij wilt hebben ook stukken eenvoudiger. Het zijn gewoon enkele simpele COUNT() queries die je uitvoert op je koppeltabel...

Reageren