14. oktober 2008 - 22:56Der er
15 kommentarer og 1 løsning
Query med flere data i samme variable
Hej Eksperter.
Jeg har et problem, hvor jeg har et resultat af IP'er, lad os fx sige jeg har 10 IP'er i variablen $user_indo[ip], det bruger jeg så til at sortere i det næste query hvor jeg vil finde de steder hvor disse IP'er optræder i min database. Hvordan kan jeg gøre det? For sådan som jeg har det nu, søger den kun på den først IP i min variable.
Ah okay, det var mere fordi jeg hellere ville have et generelt svar på hvordan man gør, i stedet for en konkret løsning på mit problem, da jeg synes jeg lærer mere ved at gøre det selv.
Anyway kode:
if(is_numeric($_POST[searchtext])) { $accountname = mysql_query("SELECT id FROM players WHERE id = '$_POST[searchtext]'"); } else { $accountname = mysql_query("SELECT id FROM players WHERE accountname = '$_POST[searchtext]'"); } $username = mysql_fetch_assoc($accountname); $searchquery = mysql_query("SELECT * FROM ipregister WHERE id = '$username[id]'"); $ipid = mysql_fetch_array($searchquery); $searchquery2 = mysql_query("SELECT * FROM ipregister WHERE id = '$username[id]' OR ip = '$ipid[ip]'"); $count = 0; while($row = mysql_fetch_array($searchquery2)) { ... }
Hvis koden ikke er forstået i forbindelse med mit første indlæg, så er det at jeg skal have udskrevet en IP liste over alle de IP'er én person har brugt, inklusiv alle andre personer der har brugt de samme IP'er som denne ene person.
//Her tager den alle IP'er som passer til den person man søger på. $searchquery = mysql_query("SELECT * FROM ipregister WHERE id = '$username[id]'"); $ipid = mysql_fetch_array($searchquery);
//Her er det så jeg prøver at finde alle de andre personer som har brugt de samme IP'er som den person man har søgt på, plus jeg så også henter de IP'er hvor personen selv har været på. $searchquery2 = mysql_query("SELECT * FROM ipregister WHERE id = '$username[id]' OR ip = '$ipid[ip]'");
//Alt det bruger jeg så i dette while loop. while($row = mysql_fetch_array($searchquery2)) { ... }
Problemet ligger så der hvor at jeg skal finde alle personer som har brugt de samme IP'er som den person man har søgt på, for der bruger jeg søgekriteriet "ip = '$ipid[ip]'", fordi i variablen "$ipid[ip]" ligger der fx 50 forskellige IP'er, men i queryet kan den så kun finde ud af at bruge den første.
$searchquery = mysql_query("SELECT `id` FROM ipregister WHERE id = '$username[id]'"); $aIP = array(); while ($row=mysql_fetch_assoc($ipid)) { $aIP[] = "`id`='".$row["ip"]."'"; }
$searchquery2 = mysql_query("SELECT * FROM ipregister WHERE id = '$username[id]' AND ".implode(" OR ", $aIP)); while($row = mysql_fetch_assoc($searchquery2)) { ... }
"Ah okay, det var mere fordi jeg hellere ville have et generelt svar på hvordan man gør, i stedet for en konkret løsning på mit problem, da jeg synes jeg lærer mere ved at gøre det selv."
Indtil du viste koden i dén kommentar, havde ingen af os kinamands chance for at vide, hvordan IP'erne lå organiseret i din variabel. Når ikke du fortæller, hvad du gør og/eller tænker, må du vise os din kode ... that simple ;o)
pølse ... vi tager den lige én gang til for Prins Knud:
$searchquery = mysql_query("SELECT `id` FROM ipregister WHERE id = '$username[id]'"); $aIP = array(); while ($row=mysql_fetch_assoc($ipid)) { $aIP[] = "`ip`='".$row["ip"]."'"; }
$searchquery2 = mysql_query("SELECT * FROM ipregister WHERE id = '$username[id]' OR ".implode(" OR ", $aIP)); while($row = mysql_fetch_assoc($searchquery2)) { ... }
$searchquery = mysql_query("SELECT `ip` FROM ipregister WHERE id = '$username[id]'"); $aIP = array(); while ($row=mysql_fetch_assoc($ipid)) { $aIP[] = "`ip`='".$row["ip"]."'"; }
$searchquery2 = mysql_query("SELECT * FROM ipregister WHERE id = '$username[id]' OR ".implode(" OR ", $aIP)); while($row = mysql_fetch_assoc($searchquery2)) { ... }
Ja, undskyld ... 'den' var vist lidt træt i nat ;D
Læg iøvrigt mærke til, at jeg har fjernet '*' i den første query. Der er ingen grund til at hente alle felter i hver række, når vi kun skal bruge ét. I stedet bør man specificere præcis de felter, man skal bruge og skrive dem i en kommasepareret række, hvilket performer langt bedre.
Man lærer ganske rigtigt en masse ved selv at gøre tingene - men man har ikke kinamands chance for at vide, om det, man har lært, er hensigtsmæssigt. Derfor er det altid godt at få sin kode tjekket i ny og næ. Det 'værste', som kan ske, er, at man får vigtig bonusviden med i købet ;o)
Hehe det er rigtigt, det er bare at nu copy paster jeg jo bare det du har skrevet og lige retter det til, hvorimod hvis der bare blev skrevet "at man skal bruge noget array og while loop til at sætte ind i nr 2 query med noget implode", så kunne jeg ligge og rode lidt med det og så lære hvordan jeg gør til næste gang. Hvor nu skal jeg højst sandsynligt ind og kigge i den fil her næste gang for at se hvordan det var at du gjorde det :)
Men det vigtigste er jo at det virker, og ja du har ret i det med at få tjekket sin kode :D
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.