Vraag & Antwoord

Webprogrammeren & scripting

[PHP] in_array op sql resultaat?

8 antwoorden
  • Een newbie vraagje misschien, maar ik ben ook geen expert :-) Ik heb in mijn PHP script een query resultaat dat enkel een regel met waardes bevat (12,34,23,14 etc) Nu wil ik van een willekeurige waarde checken of deze in mijn query resultaat voorkomt. Niks meer en niks minder. Normaal gesproken gebruik ik daar 'in_array()' voor. Maar aangezien de betreffende array in dit geval een query resultaat is dat tot stand gekomen is d.m.v. mysql_query($query) gaat de in_array vlieger volgens mij niet op. Althans, dat denk ik, want ik krijg geen 'true's' wanneer ik daarop check. Nu kan ik wel wat dingen verzinnen om m.b.v. mysql_fetch_array een loopje te bouwen en het element voor element te checken, maar als het handiger kan dan verdient dat de voorkeur. Dit met het oog op systeem recources en efficient scripten. Voor de duidelijkheid, wat ik probeer maar blijkbaar niet kan is dus [code:1:f4a5c95c15] $sqlResult = mysql_query($query); if (in_array($randomValue, $sqlResult)) { echo "Deze staat in de database!"; } [/code:1:f4a5c95c15]
  • Heb je al gekeken wat je output is van $sqlResult? Probeer eens een [code:1:44457a94f0]print_r($sqlResult);[/code:1:44457a94f0]mysql_query() geeft namelijk een resource. Als je daarop een mysql_fetch_row() toepast, krijg je een array met de inhoud onderverdeeld in rijen. Gok ik tenminste, ik ben ook geen expert. Maar toevallig zat ik enige tijd geleden met iets soortgelijks te stoeien. :)
  • Klopt, ik krijg inderdaad een recource ID te zien. Ik ben al met mysql_fetch_array() en mysql_fetch_row() aan de gang geweest, maar dan krijg ik dus steeds het eerst gevonden resultaat, wat me dan weer dwingt om een loopje te bouwen om alles uit te lezen.
  • Ik heb het toch maar met een loopje opgelost: [code:1:0472ca5416] while ($row = mysql_fetch_array($mappingResult, MYSQL_ASSOC)) { $mapped .= $row["id"].","; } $selected = explode(",", $mapped); [/code:1:0472ca5416] Zo heb ik de hele meuk in de array $selected staan.
  • Dat lijkt me inderdaad de meest simpele oplossing.
  • in php is dit inderdaad de makkelijkste oplossing, maar waarom laat je het werk niet aan SQL over: [code:1:88c5fdbdc8]SELECT * FROM table WHERE id IN (SELECT id FROM table {optional_where_clause})[/code:1:88c5fdbdc8] Wanneer je SQL nul rijen teruggeeft zit ie er niet in, en anders wel dus; dit kan je checken met mysql_num_rows. Je kan SQL natuurlijk ook netter te werk laten gaan en alleen true of false terug laten geven maar dat heeft als nadeel - vind ik dan - dat je het resultaat moet ophalen terwijl nu alleen het aantal rijen belangrijk is. Overigens zijn er situaties waarin je om soortgelijke queries op je database te voorkomen, je beter PHP dit werk kan laten doen. Ik wil alleen aangeven dat het ook kan in SQL en dat dat meestal makkelijker is.
  • [quote:b69c62ad37="marientje"]in php is dit inderdaad de makkelijkste oplossing, maar waarom laat je het werk niet aan SQL over[/quote:b69c62ad37] Normaal gesproken volg ik inderdaad de regel: "Laat PHP alleen doen wat SQL niet kan doen". In dit geval om twee redenen niet. Ten eerste had ik geen idee met welke query dat kon (nu dus wel, waarvoor hartelijk dank :D ) En ten tweede zit dit geheel al in een loop. En om een of andere reden vind ik het niet handig om binnen een loop steeds een query uit te voeren. Overigens voor alle duidelijkheid, dit alles gebruik ik om een HTML formulier op te bouwen met select veldjes achter een aantal opties. En deze veldjes staan al naar gelang de settings aan of uit. Er draait dus een loop om de regels op te bouwen met steeds een select veldje erachter, en meteen wordt gechecked of de ID van de regel in een tabel voorkomt om vast te stellen of deze regel op 'selected; moet staan.
  • Je kan natuurlijk ook "id IN ()" in de select zetten: [code:1:3ecc02ccc4]SELECT *, id IN (SELECT id FROM table WHERE {blabla}) FROM table[/code:1:3ecc02ccc4] of: [code:1:3ecc02ccc4]SELECT *, id IN (1,5,20,64) FROM table[/code:1:3ecc02ccc4] In je resultaat staan dan alle opties maar tevens of die wel of niet in de gegeven array zit. Misschien heb je er iets aan. Anders zul je meer code moeten plaatsen. Ik vraag me vooral af wat het efficientst is; al die loops in PHP zijn meestal niet zo snel en veel db_queries ook niet.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.