dubbele informatie eruit filteren
Ik heb een koppeltabel, hier heb ik een kolom vrienden_id en een kolom automerken_id.
nu wil ik de vrienden laten zien met hun auto's.
maar de gegevens van de vriend wil ik maar 1 keer laten zien.
dus een lijst met:
Rene ---> ford
audi
Jan ---> ford
citroen
Mijn query ziet er ongeveer zo uit maar ik weet niet hoe ik hier de automerken aan toe moet voegen.
SELECT DISTINCT vrienden_id FROM vrienden_auto
Gewijzigd op 16/01/2015 18:56:18 door Rene janssen
helaas zie ik het nog niet.
Hoe kan ik met een join alleen de vrienden 1 keer laten zien en de auto's die ze hebben erbij? (als 1 vriend meer auto's heeft).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
u.user_name,
COUNT(c.make_id) amount,
GROUP_CONCAT(cm.make_name) car_list
FROM
users_friends f
JOIN
users_u
ON f.friend_id = u.user_id
LEFT JOIN
users_carmakes c
ON f.friend_id = c.user_id
LEFT JOIN
carmakes cm
ON c.make_id = cm.make_id
WHERE f.user_id = 11223
GROUP BY u.user_name
u.user_name,
COUNT(c.make_id) amount,
GROUP_CONCAT(cm.make_name) car_list
FROM
users_friends f
JOIN
users_u
ON f.friend_id = u.user_id
LEFT JOIN
users_carmakes c
ON f.friend_id = c.user_id
LEFT JOIN
carmakes cm
ON c.make_id = cm.make_id
WHERE f.user_id = 11223
GROUP BY u.user_name
Gewijzigd op 17/01/2015 22:29:26 door Ger van Steenderen
Ofwel met:
http://www.pfz.nl/wiki/resultaat-in-groepen-laten-zien/
Ofwel met de query van Ger, maar dan in php die lijst weer splitsen
Nergens heb ik hier een voorbeeld van gezien, zoals ik hieronder weergeef.
Rene ---> Audi
....----> Ford
....----> Alfa
Jan ----> Ford
... ----> citroen
Zie mijn link hierboven....
eerst de vriend daarna de while voor de auto's enz.
Dat is eigenlijk niet helemaal wat ik hier uithaal, maar het kan aan mij liggen...
Enig veschil is wel of niet een 'enter' na de naam van de vriend
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
+-------------+----------+----------------------+
| user_name | amount | car_list |
+-------------+----------+----------------------+
| Rene | 3 | Audi,Ford,Alfa |
+-------------+----------+----------------------+
| Jan | 2 | Ford,Citroen |
+-------------+----------+----------------------+
| Remi | 0 | |
+-------------+----------+----------------------+
| user_name | amount | car_list |
+-------------+----------+----------------------+
| Rene | 3 | Audi,Ford,Alfa |
+-------------+----------+----------------------+
| Jan | 2 | Ford,Citroen |
+-------------+----------+----------------------+
| Remi | 0 | |
+-------------+----------+----------------------+
Je kan dan met implode de car_list omzetten in een array.
Ivo's suggestie kan ook heel prima (is in de meeste gevallen mijn persoonlijke voorkeur),
je moet dan de query aanpassen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
u.user_name,
cm.make_name
FROM
users_friends f
JOIN
users u
ON f.friend_id = u.user_id
LEFT JOIN
users_carmakes c
ON f.friend_id = c.user_id
LEFT JOIN
carmakes cm
ON c.make_id = cm.make_id
WHERE f.user_id = 11223
ORDER_BY u.user_name
u.user_name,
cm.make_name
FROM
users_friends f
JOIN
users u
ON f.friend_id = u.user_id
LEFT JOIN
users_carmakes c
ON f.friend_id = c.user_id
LEFT JOIN
carmakes cm
ON c.make_id = cm.make_id
WHERE f.user_id = 11223
ORDER_BY u.user_name
Je krijgt dan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+-------------+------------+
| user_name | make_name |
+-------------+------------+
| Jan | Ford |
+-------------+------------+
| Jan | Citroen |
+-------------+------------+
| Remi | |
+-------------+------------+
| Rene | Audi |
+-------------+------------+
| Rene | Ford |
+-------------+------------+
| Rene | Alfa |
+-------------+------------+
| user_name | make_name |
+-------------+------------+
| Jan | Ford |
+-------------+------------+
| Jan | Citroen |
+-------------+------------+
| Remi | |
+-------------+------------+
| Rene | Audi |
+-------------+------------+
| Rene | Ford |
+-------------+------------+
| Rene | Alfa |
+-------------+------------+
Je moet alleen de tabel- en kolomnamen aanpassen aan jouw situatie.
Offtopic:
Nu weten we waarom Remi alleen op de wereld is, hij heeft geen auto!!
Gewijzigd op 17/01/2015 22:55:10 door Ger van Steenderen
Bedankt voor jullie info, ik zal eens kijken of het gaat lukken.
Ik hou jullie op de hoogte!
Groet
Toevoeging op 18/01/2015 13:27:19:
Gezien Ivo zijn methode de voorkeur had, heb ik die manier geprobeerd.
En het is ook geluk!!! :D
Nu komt meteen de volgende vraag ;)
Graag had ik meer info van de 'vriend' ik wil b.v. ook zijn achternaam erbij hebben.
Als ik bij de $record['Voornaam']['Achternaam']
Toevoeg krijg ik een fout melding:
Warning: Illegal string offset 'Achternaam' in C:\xampp\htdocs\test\koppel1.php on line 56
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
while( $record=mysqli_fetch_array($result) ) {
if($vriend != $record['Voornaam']) {
echo '<tr><th colspan="3">' . htmlspecialchars($record['Voornaam']['Achternaam']) . '</th></tr>';
$vriend = $record['Voornaam'];
}
$Merk = $record['Merk'];
$Type = $record['Type'];
$Foto = $record['Foto'];
echo " <tr>
<td>$Merk</td>
<td>$Type</td>
<td>$foto</td>
</tr>";
}
while( $record=mysqli_fetch_array($result) ) {
if($vriend != $record['Voornaam']) {
echo '<tr><th colspan="3">' . htmlspecialchars($record['Voornaam']['Achternaam']) . '</th></tr>';
$vriend = $record['Voornaam'];
}
$Merk = $record['Merk'];
$Type = $record['Type'];
$Foto = $record['Foto'];
echo " <tr>
<td>$Merk</td>
<td>$Type</td>
<td>$foto</td>
</tr>";
}
Gewijzigd op 18/01/2015 13:27:00 door rene janssen
Je bedoelt waarschijnlijk $record['Voornaam'].$record['Achternaam'].
That's it, thanks!!!