Ik heb al meerdere topics op dit forum over dit onderwerp gevonden en uiteraard uitgeprobeerd, maar ik kom er maar niet uit, ik krijg geen (goed) resultaat te zien.
Ik heb nu het volgende:
<?php
// Make a MySQL Connection
require_once 'locatievanmijnphpfile.php';
$sql = "SELECT COUNT(id) FROM modellen";
$result = mysql_query($sql) or die(mysql_error());
// Print out result
while($row = mysql_fetch_array($result)){
echo "Er zijn ". $row['COUNT(id)'] ." items.";
echo "<br />";
}
?>
Mijn tabelnaam is "modellen" en bevat de volgende velden:
`id`, `automerk`, `type`, `startnummer`, `racetype`, `raceklasse`, `racejaar`, `racedatum`, `circuit`, `team`, `resultaat_algemeen`, `resultaat_klasse`, `fabrikant`, `schaal`, `artikelnummer`, `opmerkingen`, `land_coureur_1`, `land_coureur_2`, `land_coureur_3`
Ik wil als eerste het aantal id's / rijen tellen. Daarna het aantal automerken en het aantal verschillende landen (dezelfde landen kunnen voorkomen in 3 kolommen.
Hoop dat jullie mij kunnen helpen, bij voorbaat al enorm bedankt.
Oeh, gebruik je nog de verouderde mysql_xxxxx() functies?
Dan moet je blijkbaar nog een flink verouderde PHP draaien. Momenteel zitten we bij 7.3, 7.4 en 8.0
Opzich zou jouw query gewoon moeten werken. Maar het probleem lijkt mij eerder dat je over zou moeten stappen op de functie-bibliotheek van MySQLi.
Ik neem aan dat automerken een eigen tabel heeft? Want een 'Audi' is mogelijk in je database wat anders dan een 'audi'. Een typfout en je aantal klopt niet meer.
SELECT
IF(GROUPING(automerk), 'Alle merken', automerk) AS automerk,
IF(GROUPING(land_coureur_1), 'Alle landen', land_coureur_1) AS land,
COUNT(1) AS aantal
FROM modellen
GROUP BY automerk, land WITH ROLLUP
maar dan mis je de landen van coureur 2 en 3.
Sowieso is dan de vraag of een equipe met 3 coureurs uit NL of 3x NL telt, of 1x
En hoe tel je dan als er 2 Belgen en een Duitser in een wagen zitten?
Oeh, gebruik je nog de verouderde mysql_xxxxx() functies?
Dan moet je blijkbaar nog een flink verouderde PHP draaien. Momenteel zitten we bij 7.3, 7.4 en 8.0
Nee ik zit niet bij oude php, maar wellicht heb ik "oude" php code van tips opgepikt. Ze waren namelijk wel wat ouder op het web.
Ik ga de tips eens uitproberen
[size=xsmall]Toevoeging op 26/10/2021 21:33:21:[/size]
om de verrassing vast te verklaren: het antwoord is altijd "1".
Ook als er in de tabel modellen 100 records zitten, is je antwoord 1.
Ook als de tabel leeg is, is het antwoord 1.
Dat komt omdat je het aantal opvraagt, en dus krijg je 1 antwoord terug. Dat antwoord is 0, 1 of 100, maar het is nog steeds maar 1 antwoord.
En dus is mysqli_num_rows() hier niet zo interessant.
De waarde van het record ophalen. Met een COUNT() query laat je SQL het aantal berekenen. En die geeft dat aan in een record. Probeer maar in phpMyAdmin.
Dus op zo'n query mysqli_num_rows() uitvoeren heeft geen nut, omdat je dan via PHP het aantal records telt. En.. hej... dat was dus 1.
Daarom moet je i.p.v mysqli_num_rows dus de waarde fetchen.
Beiden hebben dus een aparte werking waardoor je ze niet tegelijkertijd kan gebruiken.
Krijg ik met deze query een overzicht van aantallen :
SELECT
CASE WHEN products.productLine IS NULL THEN 'Alle merken' ELSE products.productLine END AS Product,
CASE WHEN products.productScale IS NULL THEN '---' ELSE products.productScale END AS Schaal,
COUNT(1) AS Aantal
FROM products
GROUP BY
products.productLine,
products.productScale
WITH ROLLUP
Vervolgens :
<?php
$db = new mysqli('localhost','root','root','classicmodels');
$query = "SELECT
CASE WHEN products.productLine IS NULL THEN 'Alle merken' ELSE products.productLine END AS Product,
CASE WHEN products.productScale IS NULL THEN 'Totaal' ELSE products.productScale END AS Schaal,
COUNT(1) AS Aantal
FROM
products
GROUP BY
products.productLine,
products.productScale
WITH ROLLUP";
if ( $result = $db->query( $query ) )
{
if ( $result->num_rows > 0 )
{
?>
<table border="1">
<thead>
<tr>
<th>Product</th>
<th>Schaal</th>
<th>Aantal</th>
</tr>
<thead>
<tbody>
<?php
while ( $row = $result->fetch_object() )
{
?>
<tr>
<td><?php echo $row->Product; ?></td>
<td><?php echo $row->Schaal; ?></td>
<td><?php echo $row->Aantal; ?></td>
</tr>
<?php
if ($row->Schaal == 'Totaal') {
?>
<tr>
<td colspan="3"></td>
</tr>
<?php
}
}
?>
</tbody>
</table>
<?php
}
}
?>