Order by grootste aantal, sql join
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:
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?
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:
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?
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?
Met andere woorden: bevat de tabel plaatsen plaatsnamen die niet voorkomen in de tabel bedrijven?
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?
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.
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.
Het enige wat je in wezen nodig hebt uit de plaatsen-tabel is de plaatsnaam, en dat lijkt mij een triviale join.
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.
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?
Dit geeft een telling van het aantal bedrijven per plaats uit de tabel bedrijven, gesorteerd in aflopende volgorde:
Via de plaats_id voeg je daaraan met een simpele JOIN vervolgens de plaatsnaam uit de tabel plaatsen toe:
Je gebruikt misschien net iets andere kolomnamen, dus vergelijk dat even.
Code (php)
1
2
3
4
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
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)
1
2
3
4
5
6
7
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
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.
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:
Dit zal het duidelijker maken hopelijk:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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>';
}
?>
?>
[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
Code (php)
1
2
3
4
5
6
7
8
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
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....




