Order by grootste aantal, sql join
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?
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.
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?
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.
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....