Ha PHP-hulpers,

Ik heb de volgende tabellen:


+--------------+
|   personen   |
+--------------+
| id  |  naam  |
+--------------+
| 1   |  Jan     |
| 2   |  Piet     |
| 3   |  Kees   |
| 4   |  Klaas  |
+--------------+




+-----------------------------------------+
|  Relaties                                        |
+-----------------------------------------+
| id | personen_id_1 | personen_id_2 |
+-----------------------------------------+
| 1 | 1                     | 2                    |
| 2 | 2                     | 1                    |
| 3 | 1                     | 3                    |
| 4 | 3                     | 1                    |
| 5 | 3                     | 4                    |
| 6 | 4                     | 3                    |
+-----------------------------------------+


In het voorbeeld heeft Piet een relatie met Jan, Jan met Piet en Kees en Kees met Klaas.

Nu wil ik echter de koppelpersoon tussen twee personen te weten komen.
Tussen Jan en Klaas zit Kees.
Op Hyves heb je hetzelfde idee: eigen naam -> naam vriend -> naam vriend van vriend.

Is het met deze structuur mogelijk? Zo ja, hoe?

Ik weet dat er hier vaker een topic over is geweest, maar die kon ik niet terug vinden.

Gr,
PH-MJS
Wat ze bij Hyves doen (erg eenvoudig) is een vergelijking tussen jou vrienden en de vrienden van een ander. Als ik ben ingelogd (in jou voorbeeld bijv. persoon_id 1) dan haalt die mijn vrienden op, zit ik op de pagina van persoon 3 te kijken, dan haalt die ook de vrienden van persoon 3 op en kijkt welke vrienden bij beide voorkomen.

Eigenlijk redelijk simpel dus.
<?php

SELECT id
FROM personen
WHERE
personen.id = relaties.personen_id_2
AND
relaties.personen_id_1 IN
(
SELECT personen_id_2
FROM relaties
WHERE
personen_id_1 = JOUW_ID
)

?>
Zoiets?
@Pim en Robert,
Bedankt voor jullie reacties.

Is het ook mogelijk om nog dieper te kijken en hoe doe je het dan?
Ik bedoel Jezelf -> vreemd persoon 1 -> vreemd persoon 2 -> Vriend?

Gr,
PH-MJS
@PH-MJS
Natuurlijk is dat mogelijk, maar het gebeuren wordt daar niet echt sneller van.
Je kan natuurlijk hetzelfde als hierboven nog een keer doen, maar dan vergelijk je jouw vriendenlijst op dezelfde manier met de vriendenlijst van de vrienden van de andere persoon.
Ik zou hier wel een beperking op zetten/ houden van dat er maximaal 2 andere personen tussen mogen zitten. anders duurt het genereren van die lijsten veel te lang.

Lijkt me wel een mooi vraagstuk om me aan te wagen in 1 mooie query. Als je een sql_dump ergens op internet kan plaatsen van een voorbeeld database (meer voor het gemak, omdat ik geen zin heb deze zelf op te zetten en te vullen) wil ik er best eens mee gaan stoeien.

Reageren