Aantallen tellen in tabel
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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 />";
}
?>
// 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.
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.
Gewijzigd op 25/10/2021 19:08:13 door - Ariën -
De mysql-functies zijn verouderd zoals Ariën al zei. Dat kun je beter dan ook niet meer gebruiken.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
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
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
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
Toevoeging op 26/10/2021 21:33:21:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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);
?>
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
Gewijzigd op 26/10/2021 21:34:09 door P Dekker
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?
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.
Gewijzigd op 27/10/2021 10:16:42 door - Ariën -
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?
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 :
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
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
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 :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?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
}
}
?>
$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
}
}
?>
Gewijzigd op 27/10/2021 15:01:52 door Adoptive Solution
Ik heb nu in elk geval een deel wat werkt om het aantal rijen te tellen en die een uitkomst laat zien:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$con=mysqli_connect($servername,$username,$password,$dbname);
$sql="SELECT COUNT(id) AS total FROM modellen";
$result=mysqli_query($con,$sql);
$values=mysqli_fetch_assoc($result);
$num_rows=$values['total'];
echo $num_rows
?>
$con=mysqli_connect($servername,$username,$password,$dbname);
$sql="SELECT COUNT(id) AS total FROM modellen";
$result=mysqli_query($con,$sql);
$values=mysqli_fetch_assoc($result);
$num_rows=$values['total'];
echo $num_rows
?>
Het gaat echter om het aantal modellen....
Zelfde ook voor je database. Mogelijks is er ergens een (tijdelijke) onderbreking en dan wil je toch je gebruiker waarschuwen
Gewijzigd op 02/11/2021 10:38:29 door Jan R
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if($con=mysqli_connect($servername,$username,$password,$dbname)) {
$sql="SELECT COUNT(id) AS total FROM modellen";
if($result=mysqli_query($con,$sql)) {
$values=mysqli_fetch_assoc($result);
$num_models=$values['total'];
echo 'aantal modellen: ' . $num_models;
}
else {
echo 'de query is mislukt';
}
}
else {
echo 'Het verbinden met de db is mislukt';
}
?>
if($con=mysqli_connect($servername,$username,$password,$dbname)) {
$sql="SELECT COUNT(id) AS total FROM modellen";
if($result=mysqli_query($con,$sql)) {
$values=mysqli_fetch_assoc($result);
$num_models=$values['total'];
echo 'aantal modellen: ' . $num_models;
}
else {
echo 'de query is mislukt';
}
}
else {
echo 'Het verbinden met de db is mislukt';
}
?>
Toevoeging op 03/11/2021 09:49:55:
NB: in je productie-omgeving zorg je dat je dit soort foutmeldingen niet aan de gebruikers toont.