Count specifieke waarde in een array.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Open Source Developer Engineer Ontwikkelaar

Functieomschrijving Open Source Developer Engineer Ontwikkelaar Doorontwikkelen van de software; Het naadloos integreren van de verschillende componenten Het geven van advies over het inrichten; Het kiezen van methoden en technieken voor het realiseren (waarbij je gebruik maakt van Opensource); Het meedenken met de ontwikkelingen in de markt. Functie-eisen HBO werk- en denkniveau; Ervaring als Open Source Ontwikkelaar; Ruime ervaring met Open Source software (bijv. Zimbra, Alfresco, Nextcloud, Kopano etc, etc); Je hebt kennis van producten als Kubernetes, Openvswitch, Ceph, ZFS, Proxmox, Terraform, Puppet en Ansible; Nieuwsgierig en pro-actief /Out-of-the-box denken / Analytisch en conceptueel denken / Gepassioneerd, gedreven en bedreven

Bekijk vacature »

OutSystems Developer / International environment /

Functieomschrijving Would you like to work in a professional and international working environment and do you have experience in the field of OutSystems? Apply now! Translate wishes and requirements into technical designs; Design and develop new software feautures and technologies, mainly in the field of logistics/planning; Maintainance, administration and improvement of the OutSystems platform; Solving issues and bugs within the software; Define and run test plans; Documentation of development and bugfixes; Constant improvement of the OutSystems platform and follow-up of newest innovations within this field. Functie-eisen Knowledge of and experience with OutSystems is required. Experience with other low-code platforms is

Bekijk vacature »

Snelle Jaap

Snelle Jaap

01/08/2017 12:44:29
Quote Anchor link
Ik heb een aantal categorieen waar producten onder vallen. Die categorienamen loop ik in een lijstje en ik wil graag naast elke naam laten zien hoeveel producten er onder die categorie vallen.

Voorbeeld:

Appels (2)
Peren (5)
etc

Ik ben al een eind met de code maar om de een of andere rede laat hij altijd 1 zien, terwijl er categorieen zijn met meer producten.

Dit heb ik nu:

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
17
18
19
20
21
<?PHP
  // Productcategorieen
  $pcat                  = "SELECT * FROM `snm_categories` WHERE parent_id = $pid and published = 1";
  $pcatcon               = $conn->query($pcat);
  while ($pcat         = $pcatcon->fetch_assoc()){
    // Aantal producten binnen een categorie
    $aantal            = "SELECT DISTINCT id FROM `snm_content` WHERE catid = ".$pcat['id']." and state = 1";
    $aantalcon         = $conn->query($aantal);
    $aantal         = $aantalcon->fetch_assoc();

    if(is_null($aantal)){
      $totaal = 0;
    }
else{
      $totaal = count($aantal);
    }


    $productcatoverzicht .= '
    <li class="cat-item"><a href="&'
.$pcat['alias'].'">'.$pcat['title'].'</a><span class="count">'.$totaal.'</span></li>';
  }

  echo $productcatoverzicht;
?>


Met dit als resultaat:

https://i.gyazo.com/921f22ef909ac40c899412400d5ddb40.png

De laatste categorie heeft twee producten onder zich maar laat alsnog 1 zien, hoe komt dat?
 
PHP hulp

PHP hulp

22/09/2020 12:23:26
 
Gerhard l

gerhard l

01/08/2017 13:05:12
Quote Anchor link
Omdat de fetch_assoc op regel 9 niet in een while staat zal er maar 1 row gefetched worden en in $aantal worden gezet, en deze bestaat maar uit 1 veld namelijk 'id', vandaar dat de count 1 oplevert.

Wat je zou kunnen doen is '$totaal = $aantalcon->num_rows'.
Of misschien nog beter voor performance de query omzetten naar een COUNT zie hier.
 
Snelle Jaap

Snelle Jaap

01/08/2017 13:52:29
Quote Anchor link
Gerhard l op 01/08/2017 13:05:12:
Omdat de fetch_assoc op regel 9 niet in een while staat zal er maar 1 row gefetched worden en in $aantal worden gezet, en deze bestaat maar uit 1 veld namelijk 'id', vandaar dat de count 1 oplevert.

Wat je zou kunnen doen is '$totaal = $aantalcon->num_rows'.
Of misschien nog beter voor performance de query omzetten naar een COUNT zie hier.


Dankje, ik heb het inderdaad op kunnen lossen met num_rows. Ik heb geprobeerd count te gebruiken maar kreeg een SQL foutmelding: "Voor elke afgeleide tabel moet een unieke alias worden gebruikt" op deze query: "SELECT Count(*) FROM (SELECT DISTINCT id FROM `snm_content` WHERE catid = 24 and state = 1)"
 
Thomas van den Heuvel

Thomas van den Heuvel

01/08/2017 14:08:50
Quote Anchor link
Uh, zou een id niet altijd uniek moeten zijn (en anders zou deze anders moeten heten)? Vanwaar dit DISTINCT?

Zou je niet simpelweg kunnen volstaan met:
SELECT COUNT(id) FROM `snm_content` WHERE catid = 24 and state = 1
?
Of COUNT(*) for that matter.

Vanwaar een subquery?
 
Snelle Jaap

Snelle Jaap

01/08/2017 14:42:15
Quote Anchor link
Thomas van den Heuvel op 01/08/2017 14:08:50:
Uh, zou een id niet altijd uniek moeten zijn (en anders zou deze anders moeten heten)? Vanwaar dit DISTINCT?

Zou je niet simpelweg kunnen volstaan met:
SELECT COUNT(id) FROM `snm_content` WHERE catid = 24 and state = 1
?
Of COUNT(*) for that matter.

Vanwaar een subquery?

Ah blijkbaar kan het dus ook zo. Ik had count nog nooit gebruikt en via w3schools kwam ik bij de query in mijn antwoord hierboven. Dit werkt wel inderdaad.
 
Ivo P

Ivo P

01/08/2017 15:13:51
Quote Anchor link
kan toch ook in 1 query?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT cat.alias, cat.title, cat.id, SUM(con.catid=cat.id) AS totaal
FROM `snm_categories` cat
LEFT JOIN snm_content con ON con.catid = cat.id AND con.state=1
WHERE cat.parent_id = $pid
  and cat.published = 1


of ipv de SUM() met COUNT(catid)
maar dan moet je even kijken wat hij doet als er 0 items zijn voor een zekere categorie
 



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.