Optellen in een tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pierre Web

Pierre Web

15/01/2016 10:51:01
Quote Anchor link
Hallo

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
 
PHP hulp

PHP hulp

16/11/2024 00:41:21
 
Ward van der Put
Moderator

Ward van der Put

15/01/2016 11:14:24
Quote Anchor link
>> 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?
 
Aad B

Aad B

15/01/2016 11:16:32
Quote Anchor link
Je schrijft:
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
 
Pierre Web

Pierre Web

15/01/2016 11:31:18
Quote Anchor link
Voorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 15/01/2016 11:41:58 door Pierre Web
 
Ivo P

Ivo P

15/01/2016 11:33:00
Quote Anchor link
bedoel je dat er in een tabel bijvoorbeeld 20 records zijn, en dat bij 13 daarvan de kolom Naam niet leeg is (null of lege string)
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';
 
Pierre Web

Pierre Web

15/01/2016 11:41:13
Quote Anchor link
Ik wil het aantal records in woonplaats tellen in het voorbeeld dus 4 (eigenlijk had ik die ook moeten aanvullen tot 4 , is inmiddels gebeurd)

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$result = $MySQLiconn->query("SELECT SUM(woonplaats != '') FROM test;");
while ($row = $result->fetch_array()) {

 echo $row['SUM(woonplaats)'];
  }
Gewijzigd op 15/01/2016 11:42:44 door Pierre Web
 
Ward van der Put
Moderator

Ward van der Put

15/01/2016 12:18:42
Quote Anchor link
SUM() telt op en COUNT() telt. En je kunt geen strings optellen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT COUNT(woonplaats)
  FROM test
 WHERE woonplaats != ''


Beter kun je NULL in plaats van de lege string gebruiken: COUNT() telt NULL namelijk niet mee.
 
Jan de Laet

Jan de Laet

15/01/2016 12:24:05
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$result = $MySQLiconn->query("SELECT COUNT(1) AS teller FROM test WHERE woonplaats IS NULL ;");
while ($row = $result->fetch_array()) {

 echo $row['teller'];
  }
 
Pierre Web

Pierre Web

15/01/2016 12:36:16
Quote Anchor link
Is het mogelijk deze eens goed te plaatsen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$result = $MySQLiconn->query("SELECT COUNT(woonplaats != '') FROM test WHERE woonplaats != ''");
while ($row = $result->fetch_array()) {

  }
 echo $row['SUM(woonplaats)']; // moet 4 zijn in voorbeeld
 
Ward van der Put
Moderator

Ward van der Put

15/01/2016 12:50:41
Quote Anchor link
Je hebt geen while nodig als je één rij ophaalt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$result
= $MySQLiconn->query("SELECT COUNT(woonplaats) AS aantal FROM test WHERE woonplaats != ''");
$row = $result->fetch_array();
echo $row['aantal'];
?>
 
Pierre Web

Pierre Web

15/01/2016 13:15:32
Quote Anchor link
Bedankt ! dit werkt

Opmerking

Waarom zal dit: WHERE naam == Jan"

onderstaande foutmelding opleveren:
Call to a member function fetch_array() on boolean in...........
 
Ivo P

Ivo P

15/01/2016 14:05:27
Quote Anchor link
omdat er om JAN de quotes missen

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"
 
Thomas van den Heuvel

Thomas van den Heuvel

15/01/2016 14:55:36
Quote Anchor link
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
 
Pierre Web

Pierre Web

15/01/2016 15:00:17
Quote Anchor link
Gelukt, Beiden bedankt voor jullie hulp en uitleg!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.