Als php-beginner kom ik hier niet uit:

Een bestaande externe tabel (kan ik helaas niets aan veranderen) bestaat uit een veld 'groep' en een veld 'leden'. Probleem: in het veld 'leden' worden de verschillende leden van die groep door middel van komma's gescheiden.

Nu wil ik aan de hand van de user-id van een ingelogde gebruiker bepalen van welke groepen die gebruiker lid is.

Mijn denkrichting is nu als volgt:
- alle groepen opvragen (is slechts een beperkt aantal groepen)
- voor elke groep de explode() functie toepassen op het veld leden
- vervolgens voor elke groep bepalen of de gebruiker lid is.

Aangezien ik een echte php-beginner ben, hoor ik graag of dit een goed idee is én misschien kunnen jullie me helpen om dit op een correcte manier uit te voeren...?

Alvast 1 antwoord: ik weet dat comma seperated velden in databases onhandig zijn, maar dit aanpassen valt in dit geval buiten mijn mogelijkheden.
Allereerst had je beter in de tabel van de users een veld kunnen maken als 'groep'. Maar wat nu de beste oplossing is:

Verander je structuur in 'leden' (mits dit niet zo is) naar:
,1,2,3,4,5,6,

Dan kun je als SQL gebruiken:
SELECT groep FROM tabel WHERE groep LIKE '%,USERID,%'
Bedankt voor het snelle antwoord! Helaas ben ik een kleine extensie aan het maken welke data uit bestaande databases gebruikt. Ik kan dus zowel de user-tabel als de structuurverandering die jij voorstelt niet gebruiken... helaas...
Je kunt de manier van Arjan nog steeds gebruiken, alleen zul je de query iets uit moeten breiden:
<?php
$sql = "
SELECT groep
FROM tabel
WHERE leden LIKE '".$user_id.",%'
OR leden LIKE '%,".$user_id.",%'
OR leden LIKE '%,".$user_id."'
";
?>
Deze query is verre van efficient, maar zal doen wat jij wilt.
Thanks blanche!

Wanneer er maar 1 lid in een groep zat, werd het resultaat nog niet getoond (er werd dan een losse user_id opgeslagen), maar door
WHERE leden = '".$user_id."' toe te voegen is dat ook opgelost!

<?php
$sql = "
SELECT groep
FROM tabel
WHERE leden = '".$user_id."'
leden LIKE '".$user_id.",%'
OR leden LIKE '%,".$user_id.",%'
OR leden LIKE '%,".$user_id."'
";
?>
De kans was inderdaad groot dat er een functie voor dit probleem zou bestaan. Goed gevonden brie :-)

De query zou dan worden:
<?php
$sql = "
SELECT groep
FROM tabel
WHERE FIND_IN_SET('".$user_id."', leden) > 0
";
?>
Slim Blanche, zover had ik nog niet nagedacht. Lang niet gezien trouwens ;)

[edit]Typo[/edit]
Bedankt mensen, dit werkt als een zonnetje!

Reageren