Optellen in een tabel
Ik probeer van een tabel in de database de records in verschillende kolommen apart te tellen.
Voorbeeld: kolom Naam bevat 13 records
kolom Woonplaats 8 records
Of Naam waar naam = Jan
$var naam = 13;
$woonplaats = 8 enz.
Hoe krijg ik die terug in een $var
Met count aan de slag gegaan maar kom er niet verder mee
Laat om te beginnen eens zien wat je dan met SELECT COUNT() hebt geprobeerd?
Voorbeeld: kolom Naam bevat 13 records
kolom Woonplaats 8 records
???
Laat ook je datamodel eens zien. Hoe ziet je tabel(len) eruit?
Gewijzigd op 15/01/2016 11:17:10 door Aad B
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+-------+--------------+------+-----+
| id | Naam | woonplaats |
+-------+--------------+------+-----+
| 1 | Jan | plaats1 |
| 2 | Kees | plaats2 |
| 3 | Jan | plaats3 |
| 4 | Piet | plaats4 |
+-------+--------------+------+-----+
$query_test = $mysqli->query("SELECT *, COUNT(woonplaats) FROM test");
Gewenste uitkomst 2
$query_test = $mysqli->query("SELECT *, COUNT(naam) FROM test WHERE naam = Jan");
Gewenste uitkomst 2
| id | Naam | woonplaats |
+-------+--------------+------+-----+
| 1 | Jan | plaats1 |
| 2 | Kees | plaats2 |
| 3 | Jan | plaats3 |
| 4 | Piet | plaats4 |
+-------+--------------+------+-----+
$query_test = $mysqli->query("SELECT *, COUNT(woonplaats) FROM test");
Gewenste uitkomst 2
$query_test = $mysqli->query("SELECT *, COUNT(naam) FROM test WHERE naam = Jan");
Gewenste uitkomst 2
Gewijzigd op 15/01/2016 11:41:58 door Pierre Web
en in 8 gevallen is de kolom Woonplaats niet leeg.
Of noem je de tabellen kolom? en bedoel je te zeggen dat je het aantal records in de tabel woonplaatsen wilt tellen?
Toevoeging op 15/01/2016 11:33:44:
ah. het eerste geval dus.
Toevoeging op 15/01/2016 11:34:31:
select * en count() in 1 query gaat zelden goed.
zeker aangezien je group-by vergeet
http://wiki.pfz.nl/group-by
Toevoeging op 15/01/2016 11:36:05:
SELECT SUM(woonplaats != '') FROM tabel;
en
SELECT SUM(naam = 'Jan') FROM tabel
of (mijn voorkeur)
SELECT COUNT(1) FROM tabel WHERE naam = 'Jan';
Verder in Naam het aantal records tellen met naam Jan
Toevoeging op 15/01/2016 12:09:09:
Bedankt ,
Onderstaande is bij mij nog niet goed: Undefined index: SUM(woonplaats)
Code (php)
1
2
3
4
5
2
3
4
5
$result = $MySQLiconn->query("SELECT SUM(woonplaats != '') FROM test;");
while ($row = $result->fetch_array()) {
echo $row['SUM(woonplaats)'];
}
while ($row = $result->fetch_array()) {
echo $row['SUM(woonplaats)'];
}
Gewijzigd op 15/01/2016 11:42:44 door Pierre Web
Beter kun je NULL in plaats van de lege string gebruiken: COUNT() telt NULL namelijk niet mee.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$result = $MySQLiconn->query("SELECT COUNT(woonplaats) AS aantal FROM test WHERE woonplaats != ''");
$row = $result->fetch_array();
echo $row['aantal'];
?>
$result = $MySQLiconn->query("SELECT COUNT(woonplaats) AS aantal FROM test WHERE woonplaats != ''");
$row = $result->fetch_array();
echo $row['aantal'];
?>
Opmerking
Waarom zal dit: WHERE naam == Jan"
onderstaande foutmelding opleveren:
Call to a member function fetch_array() on boolean in...........
Toevoeging op 15/01/2016 14:09:30:
verklaring voor SUM(woonplaats != '')
het stuk tussen de ( ) is een vergelijking waar true of false uitkomt. als de waarde in de kolom woonplaats een lege string is, dan is het true, anders false.
True is ook wel te schrijven als 1, false als 0
In het gegeven voorbeeld is 2 maal de kolom Woonplaats voorzien van een waarde. (dat was tenminste zo voor de edit?)
dat levert dus 2 maal een 1 op. Die enen opgeteld levert je 2 op als totaal.
Dit werkt ook zo voor woonplaats = '' of woonplaats = 'Amsterdam'
Zou "leeg" als NULL opgeslagen staan, dan werkt het ook met count(), voor het geval "is er iets ingevuld"
Ward van der Put op 15/01/2016 12:50:41:
Je hebt geen while nodig als je één rij ophaalt:
Daarbij is het hier gerechtvaardigd om het resultaat op te halen zonder eerst te controleren of er resultaten zijn -wat eigenlijk wel gebruikelijk is- omdat, indien je enkel een SUM() of soortgelijke functie aanroept middels een SELECT statement, je altijd exact één resultaat terugkrijgt, of er nu "resultaten" zijn, of niet - je krijgt altijd één resultaatrij terug.
Gewijzigd op 15/01/2016 14:56:29 door Thomas van den Heuvel
Gelukt, Beiden bedankt voor jullie hulp en uitleg!