IF-statement voor array
Maar nu wil ik dat niet alle elementen uit die array getoond worden, maar dat ik een IF-statement kan gebruiken. Voorbeeld: als $row["therapie"] het cijfer 2 bevat, dan...
$row["therapie"] kan 1 tot 120 verschillende elementen bevatten, gescheiden door "," en ik hoef maar op één getal te controleren om dan iets te doen.
Kan iemand mij een tip geven?
Marcus geleyn op 16/08/2015 10:47:11:
$row["therapie"] kan 1 tot 120 verschillende elementen bevatten, gescheiden door ","
Daarbij voorkom je tevens dat je code bezaaid raakt met dit soort magische nummers.
EDIT: Zelfs als je (nu) maar één nummer hebt die apart behandeld moet worden ("mag niet getoond worden"). Wie zegt dat er straks niet meerdere zijn? In het kader van flexibiliteit/uitbreidbaarheid is het misschien het overwegen waard om een eigenschap "tonen" toe te voegen aan de entiteit "therapie". Je hebt dan ook meteen een criterium om te filteren, zodat je daarna je array makkelijk kunt doorlopen.
Gewijzigd op 16/08/2015 15:37:24 door Thomas van den Heuvel
Thomas, ik heb dat al geprobeerd, maar dat kom ik een fout tegen. Ik heb onderstaande regel al in diverse uitvoeringen geprobeerd en dat zou inderdaad idealer zijn, maar het werkt niet.
Code (php)
1
2
3
2
3
<?php
$sql = "SELECT id, member, land, therapie FROM users WHERE land = $keuzeland AND therapie = $keuze_therapie";
?>
$sql = "SELECT id, member, land, therapie FROM users WHERE land = $keuzeland AND therapie = $keuze_therapie";
?>
$keuze_therapie bevat één getal, maar "therapie" is een array met 1 tot 120 getallen. Het zal toch niet "AND ($row)therapie=" moeten zijn zeker, dan eet ik mijn schoen op. Maar neen, dat kan niet, ik moet eerst explode doen en selecteren. Enfin, daar zit ik mee vast.
Kijk eens naar normaliseren.
Tja SanThe, daar heb ik al opmerkingen over gekregen, maar leden duiden via een keuzeformulier zelf alle therapieën aan en kunnen die later ook zelf wijzigen. de bijhorende getallen worden dan in een array opgeslagen.
Marcus geleyn op 16/08/2015 16:47:48:
de bijhorende getallen worden dan in een array opgeslagen.
En daar ga je fout.
Kijk eens naar koppeltabel.
Gewijzigd op 16/08/2015 16:50:57 door - SanThe -
De truuk is dat je een passage zoekt in een string, dit doe je met LOCATE.
Stel dat je je "array" hebt: "1,2,5,7" en je wilt kijken of deze waarde hier in zit. Zoeken op simpelweg "2" gaat niet werken omdat dit ook matches met "12" en "20" oplevert. Je moet er dus een komma voor en achter plakken: ",2,". Maar dan - als je in de bovenstaande string "7" zoekt (",7," dus) gaat dit niet werken. Daarom moet je aan deze kolom ook komma's plakken. Je komt dan dus tot de volgende oplossing:
LOCATE retourneert de eerste karakter positie van de eerste parameter als deze voorkomt in de tweede parameter startende vanaf positie 1, of 0 als deze hier niet in voorkomt.
Met CONCAT kun je strings aan elkaar fietsen.
Toegepast op jouw query hierboven wordt dit dus zoiets (er vanuit gaande dat dit een kommagescheiden string is dus):
Code (php)
1
2
3
4
2
3
4
SELECT id, member, land, therapie
FROM users
WHERE land = $keuzeland
AND LOCATE(CONCAT(',', $keuze_therapie, ','), CONCAT(',', therapie, ',')) > 0
FROM users
WHERE land = $keuzeland
AND LOCATE(CONCAT(',', $keuze_therapie, ','), CONCAT(',', therapie, ',')) > 0
Maar ja, normaliseren is dus beter.
goed dat je me daar op attendeert, dat gaan we dan maar snel aanpassen en uitproberen. Bedankt!