Hallo,

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.
Probeer dit eens:

<?php

echo "Er zijn ". $row[0] ." items.";

?>

De mysql-functies zijn verouderd zoals Ariën al zei. Dat kun je beter dan ook niet meer gebruiken.
De query zou kunnen zijn

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?

Zie ook https://dev.mysql.com/doc/refman/8.0/en/group-by-modifiers.html
- Ariën - op 25/10/2021 19:05:09

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]

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = 'verbinding.php';

$result = mysqli_query($mysqli, "SELECT COUNT(id) FROM modellen");

/* Get the number of rows in the result set */
$row_cnt = mysqli_num_rows($result);

printf("Result set has %d rows.\n", $row_cnt);
?>


Heb nu bovenstaande code geprobeerd, maar de uitkomst blijft 0

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.
Wat is dan de truc om wel het juiste aantal te krijgen?
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.

P Dekker op 27/10/2021 09:09:31

Wat is dan de truc om wel het juiste aantal te krijgen?

Had je mijn antwoord hierboven al getest?
Met behulp van deze database :

https://www.mysqltutorial.org/mysql-sample-database.aspx

En wat inspiratie hier :

https://mariadb.com/kb/en/select-with-rollup/

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
	}
}
?>

Reageren