Order by grootste aantal, sql join

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Furio Scripting

Furio Scripting

07/11/2016 13:54:28
Quote Anchor link
Goedemiddag forumleden,

Ik wil graag de volgorde bepalen van een lijstje dat ik weergeef in een tabel. Diegene met de meeste klanten wil ik als eerste weergeven, ik moet deze optellen in de bedrijven tabel aan de hand van de plaats_id.

Ik heb 2 tabellen, eentje heet plaatsen en eentje heet bedrijven.

Dit is mijn huidige query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php  $q = 'SELECT * FROM plaatsen '; ?>


In bedrijven tabel staat plaats_id welke ik dus kan koppelen met de eerste tabel plaatsen (id) maar ik snap weinig topt niets van joins.

Kan iemand mij helpen hiermee?
 
PHP hulp

PHP hulp

23/11/2024 13:33:04
 
Ward van der Put
Moderator

Ward van der Put

07/11/2016 14:06:56
Quote Anchor link
Moeten er ook plaatsen worden weergegeven waar géén bedrijven zitten?
Met andere woorden: bevat de tabel plaatsen plaatsnamen die niet voorkomen in de tabel bedrijven?
 
Furio Scripting

Furio Scripting

07/11/2016 14:09:09
Quote Anchor link
Ward van der Put op 07/11/2016 14:06:56:
Moeten er ook plaatsen worden weergegeven waar géén bedrijven zitten?
Met andere woorden: bevat de tabel plaatsen plaatsnamen die niet voorkomen in de tabel bedrijven?


Nee elke bedrijf bevat een plaats_id die altijd voorkomt in de tabel plaatsen.

Voorbeeld:

Bedrijf - plaats_id
Jantjes snackbar - 1
Bakkerij het stopeje - 2

Tabel plaatsen:

id - plaats
1 - Amsterdam
2 - Alkmaar.
 
Thomas van den Heuvel

Thomas van den Heuvel

07/11/2016 14:22:07
Quote Anchor link
Je wilt dus een lijst van plaatsnamen, (aflopend?) gesorteerd op het aantal bedrijven wat daar gevestigd is? Waarom neem je de bedrijven-tabel niet als uitgangspunt? Dat werkt misschien wat makkelijker.

Het enige wat je in wezen nodig hebt uit de plaatsen-tabel is de plaatsnaam, en dat lijkt mij een triviale join.
 
Furio Scripting

Furio Scripting

07/11/2016 14:30:03
Quote Anchor link
Thomas van den Heuvel op 07/11/2016 14:22:07:
Je wilt dus een lijst van plaatsnamen, (aflopend?) gesorteerd op het aantal bedrijven wat daar gevestigd is? Waarom neem je de bedrijven-tabel niet als uitgangspunt? Dat werkt misschien wat makkelijker.

Het enige wat je in wezen nodig hebt uit de plaatsen-tabel is de plaatsnaam, en dat lijkt mij een triviale join.


Klopt inderdaad! Hoe krijgen we dit voor elkaar?
 
Ward van der Put
Moderator

Ward van der Put

07/11/2016 14:32:07
Quote Anchor link
Dit geeft een telling van het aantal bedrijven per plaats uit de tabel bedrijven, gesorteerd in aflopende volgorde:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
  SELECT COUNT(*) AS aantal_bedrijven_per_plaats
    FROM bedrijven b
GROUP BY b.plaats_id
ORDER BY aantal_bedrijven_per_plaats DESC

Via de plaats_id voeg je daaraan met een simpele JOIN vervolgens de plaatsnaam uit de tabel plaatsen toe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
  SELECT COUNT(*) AS aantal_bedrijven_per_plaats,
         p.plaatsnaam
    FROM bedrijven b
    JOIN plaatsen p
      ON b.plaats_id = p.plaats_id
GROUP BY b.plaats_id
ORDER BY aantal_bedrijven_per_plaats DESC

Je gebruikt misschien net iets andere kolomnamen, dus vergelijk dat even.
 
Furio Scripting

Furio Scripting

07/11/2016 14:57:39
Quote Anchor link
Hartelijk dank! Ik ben even aan het puzellen om het werkend te krijgen, helaas tot dusver nog niet gelukt, ik heb tevens de plaats_id nodig voor mijn andere functies...

Dit zal het duidelijker maken hopelijk:

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
22
<?php

 [code]<?php
                                        
$database
= new database();
                                        
$q = 'SELECT COUNT(*) AS aantal_bedrijven_per_plaats
    FROM bedrijven b
GROUP BY b.plaats_id
ORDER BY aantal_bedrijven_per_plaats DESC'
;

$result = $database->query($q);
                                        
while ($rows = mysqli_fetch_assoc($result))
{

echo '<tr><td>#1</td><td>'.$rows['plaats'].'</td><td>'.verkrijgAantalKlantenByPlaatsId($rows['id']).'</td><td>'.verkrijgAantalConsumentenByPlaatsId($rows['id']).'</td><td>'.verkrijgAantalBezochteActiesByPlaatsId($rows['id']).'</td><td>'.verkrijgAantalBezochteBedrijfpaginasByPlaatsId($rows['id']).'</td><td>'.verkrijgAantalActieveActiesByPlaatsId($rows['id']).'</td><td>'.verkrijgAantalVerkochteVouchersByPlaatsId($rows['id']).'</td></tr>';
}

                                        
                                        
                                        
?>

?>
Gewijzigd op 07/11/2016 14:58:35 door Furio Scripting
 
Ivo P

Ivo P

08/11/2016 10:38:16
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT
     COUNT(*) AS aantal_bedrijven_per_plaats,
     b.plaats_id,
     p.plaatsnaam
FROM bedrijven b
JOIN plaatsen p ON p.id = b.plaats_id
GROUP BY b.plaats_id, p.plaatsnaam
ORDER BY aantal_bedrijven_per_plaats DESC


Toevoeging op 08/11/2016 11:15:41:

je mist trouwens in je scriptje hierboven in de query het opvragen van de plaatsnaam. Die zal dus op regel 16 ook niet in $row zitten....
 



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.