Avatar billede msc_cph Nybegynder
18. maj 2004 - 14:29 Der er 4 kommentarer og
1 løsning

Mudder i sortering!!

Hej

Vi har et irriterende problem med at liste nogle "spillere" i et managerspil. Det vi gerne vil er at liste alle forsvarsspillere undtagen dem der allerede figurerer på brugerens hold.

Vi har alle brugerens spillere i et array, der holder på spiller id´er. Arrayet hedder $team.

Så laver vi et query og henter alle spillere i databasen og mens vi løber dem igennem prøver vi at sammenholde dem med spillerene i $team arrayet, og det er her det sjove begynder...

Vores kode ser ud som følger:

    while($forsvar = mysql_fetch_row($list_fors)){
                       
                        for($x = 0; $x <= count($team); $x++){
                                if($team[$x] != $forsvar[6]){ // hvis ikke de findes i team arrayet skal printes ud
                                echo "<b>$forsvar[0] $forsvar[1] </b> $forsvar[2] $forsvar[3] $forsvar[4]<br>";
                                break;
                                }
                           
                            }
                        }
                    }


MEN vi får stadig udskrevet en given spiller der figurerer på vores hold (han er vores lille testperson)...det er jo ikke meningen....hvad der er endnu sjovere er at hvis vi vender den om og istedet skriver:

    while($forsvar = mysql_fetch_row($list_fors)){
                       
                        for($x = 0; $x <= count($team); $x++){
                                if($team[$x] == $forsvar[6]){ // hvis de findes i team arrayet skal de printes ud
                                echo "<b>$forsvar[0] $forsvar[1] </b> $forsvar[2] $forsvar[3] $forsvar[4]<br>";
                                break;
                                }
                           
                            }
                        }
                    }


Så skriver den KUN vores testspiller ud?!?

Så vi synes at stå med et problem, der virker den ene vej men ikke den anden, og det fatter vi jo hat af?!?

Er der nogen der kan hjælpe os videre?

mvh
msc_cph
Avatar billede dennismp Nybegynder
19. maj 2004 - 00:11 #1
Udfra dit spørgsmål er det svært at komme med noget konkret.

Men lad mig prøve.

$team er et array der indeholder id'erne

$sql = 'SELECT ... FROM ... WHERE .. AND spiller.id NOT IN(' . join(',',$team) . ')';
$res = mysql_query(..);
.. osv.

Så klarer databasen besværet med at fjerne de  ønskede spillere.
Avatar billede msc_cph Nybegynder
21. maj 2004 - 14:46 #2
Det lyder umiddelbart rigtigt, men jeg kan ikke få den "NOT IN" til at virke.

Kan du gi' et eksempel på én?

I mit tilfælde er det:

Jeg skal ha listet alle Forsvarsspillere undtagen de spillere som allerede er på brugerens hold.

Dvs.:

"Spiller" tabel og en "Bruger_Spiller" tabel. Alle spillere befinder sig i "Spiller" og de spillere som brugeren har er i "Bruger_Spiller".

Altså noget i stil med:

SELECT Spiller.s_ID
FROM Spiller
WHERE Spiller.s_ID NOT IN (SELECT Bruger_Spiller.s_ID FROM Bruger_Spiller);

eller:

SELECT Spiller.fornavn, Spiller.s_ID, Kaede.k_ID
FROM Spiller, Kaede, Bruger_Spiller
WHERE (Spiller.k_ID = Kaede.k_ID)
AND Kaede.k_ID = 2
AND (Spiller.s_ID != Bruger_Spiller.s_ID);

/msc_cph
Avatar billede dennismp Nybegynder
21. maj 2004 - 18:03 #3
SELECT ..
FROM ..
WHERE ..
AND spiller.id NOT IN (1,2,3,4,5)

Hvordan ser tabellerne for Spiller og Bruger_Spiller ud?
Avatar billede msc_cph Nybegynder
21. maj 2004 - 23:43 #4
Bruger_Spiller tabellen indeholder et ID fra Bruger og et ID fra Spiller, den forbinder Brugeren med Spillerne.
Avatar billede msc_cph Nybegynder
22. maj 2004 - 13:30 #5
Tak for hjælpen - fik det til at virke med dit første svar :)

/msc_cph
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