Avatar billede xsix Nybegynder
14. oktober 2008 - 22:56 Der 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.

På forhånd tak.
Mvh,
XsiX
Avatar billede olebole Juniormester
14. oktober 2008 - 23:10 #1
<ole>

Prøv at slette linje 23. Så tror jeg, det virker  ;o)

/mvh
</bole>
Avatar billede erikjacobsen Ekspert
14. oktober 2008 - 23:55 #2
Ole forsøger at være sjov. Det er der givetvis delte meninger om.

Men Ole mener, at du ikke giver tilstrækkelige oplysninger til at nogen som helst kan finde endsige løse dit problem.
Avatar billede w13 Novice
14. oktober 2008 - 23:59 #3
Vi skal nok se din kode, ja. =)
Avatar billede xsix Nybegynder
15. oktober 2008 - 00:13 #4
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)) {
...
}
Avatar billede xsix Nybegynder
15. oktober 2008 - 00:17 #5
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.
Avatar billede erikjacobsen Ekspert
15. oktober 2008 - 00:18 #6
Om igen, du  giver ikke tilstrækkelige oplysninger til at nogen som helst kan finde endsige løse dit problem. Hvad står der fx i diverse variabler?
Avatar billede xsix Nybegynder
15. oktober 2008 - 00:44 #7
//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.
Avatar billede olebole Juniormester
15. oktober 2008 - 01:42 #8
Prøv noget i stil med:

$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)) {
...
}
Avatar billede olebole Juniormester
15. oktober 2008 - 01:49 #9
- eller rettere:
    $searchquery2 = mysql_query("SELECT * FROM ipregister WHERE id = '$username[id]' OR ".implode(" OR ", $aIP));
Avatar billede olebole Juniormester
15. oktober 2008 - 01:52 #10
"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)
Avatar billede olebole Juniormester
15. oktober 2008 - 01:53 #11
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)) {
...
}
Avatar billede olebole Juniormester
15. oktober 2008 - 01:55 #12
- og nu _lover_ jeg, jeg går i seng ...!

$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)) {
...
}

Så skulle den være der! - godnat  ;D
Avatar billede xsix Nybegynder
15. oktober 2008 - 02:41 #13
Skulle lige rette:
while ($row=mysql_fetch_assoc($ipid)) {
til:
while ($row=mysql_fetch_assoc($searchquery)) {

Men ellers virker det perfekt, tusind tak! :D

Bare smid et svar for point :)
Avatar billede olebole Juniormester
15. oktober 2008 - 09:33 #14
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)
Avatar billede xsix Nybegynder
15. oktober 2008 - 12:42 #15
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
Avatar billede olebole Juniormester
15. oktober 2008 - 12:59 #16
Tak for points  ;o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester