30. december 2007 - 03:27Der er
4 kommentarer og 1 løsning
Sammenlign arrays og find ens værdier
Hej php eksperter!
Jeg har lavet et funktion, som jeg føler kan skrives meget bedre.
Det drejer sig om følgende: Jeg har en hjemmeside med billeder. Hvis en bruger optræder på et billede, kan han trykke "jeg er på billedet". Dette indsætter følgende i databasen:
mysql_query("INSERT INTO billeder_poserer (brugerid, billede_url) VALUES ('$brugerid', '$billede_url')");
Nu kan alle se, at han poserer på dette billede. Så langt så godt. Nu vil jeg gerne finde ud af, hvilke billede _både_ Ida (brugerid 1), Thomas (brugerid 2) og Anton (brugerid 3) poserer på.
Jeg har gjort følgende:
$ider = array("1", "2", "3"); // De brugerid'er der skal optræde på billederne
foreach($ider as $nr=>$brugerid){ $arrayet="array".$nr;
$hent_person = mysql_query("SELECT billede_url FROM billeder_poserer WHERE brugerid='$brugerid'"); while($row = mysql_fetch_assoc($hent_person)){ ${$arrayet}[] = $row[billede_url]; }
}
$antal = count($ider);
/* Nedenstående er nok lidt dumt. Men jeg ved jo ikke hvor mange arrays jeg skal sammenligne? Altså om det er en 2,3,4 eller fem personer der skal optræde på billederne */
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
SELECT * FROM billede_url WHERE billede_url IN (SELECT billede_url FROM billeder_poserer WHERE brugerid = $brugerid1) AND billede_url IN (SELECT billede_url FROM billeder_poserer WHERE brugerid = $brugerid2) AND billede_url IN (SELECT billede_url FROM billeder_poserer WHERE brugerid = $brugerid3)
Jeg tør dog ikke sige noget om performance i forhold til at gøre det hele ude i PHP-koden.
Den kunne konstrueres sådan:
$ider = array(1, 2, 3);
$sql = "SELECT * FROM billede_url WHERE ";
$whereArr = array(); for ($ider as $id) { $whereArr[] = "billede_url IN (SELECT billede_url FROM billeder_poserer WHERE brugerid = $id)"; }
$sql .= implode(" AND ", $whereArr[]);
PS: Når du nu bruger prugerid i din tabel, så burde du faktisk også gøre noget lignende med billeder - altså udpege dem ved billedid i stedet for url.
showsource -> Jeg er ikke helt sikker på hvad din løsning gør, men det outputer i hvert fald mange billeder, hvor ingen af tallene i $ider indgår.
Svaret fra nielle outputtede kun billeder hvor alle tal fra $ider indgik, som det skulle. Dog blev billederne gentaget, men det ordnede sig med DISTINCT.
Nielle er nok den der har hjulpet mig mest, eftersom det er hans løsning jeg bruger. Så læg et svar nielle :) Og tak for hjælpen til showsource
showsource's kode burde give dig alle de billeder hvor blot een af personerne er med. Den burde ikke give dig billeder hvor *ingen* var med.
Jeg kan nu ikke lige gennemskue hvorfor du skulle få dubletter med min kode, men hvis en DISTINCT gør det så er det jo fint. :^)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.