23. december 2004 - 23:33Der er
5 kommentarer og 1 løsning
Endnu et problem med SQL
Hej er igang med at søge system hvor man skal kunne søge efter nogle replays til warcraft3... Problemet er at hvis man søger efter bare 2 af den samme race, vil den godkende dem som hvor der bare er mindst 1 af den race. Hvordan kan jeg kontrollere at den ikke bare tar det samme 2 gange? Er jeg nød til at lave noget php kode som håndtere det eller er det muligt via SQL at lave noget som ordner det problem? Den sql sætning jeg er kommet frem til indtil videre er herunder:
SELECT * FROM replays3v3 WHERE ( ( navn1 LIKE '%".$navn."%' OR navn2 LIKE '%".$navn."%' OR navn3 LIKE '%".$navn."%' OR navn4 LIKE '%".$navn."%' OR navn5 LIKE '%".$navn."%' OR navn6 LIKE '%".$navn."%' ) AND ( ( ( race1='".$spiller1."' OR race2='".$spiller1."' OR race3='".$spiller1."' ) AND ( race1='".$spiller2."' OR race2='".$spiller3."' OR race3='".$spiller3."' ) ) OR ( ( race4='".$spiller1."' OR race5='".$spiller1."' OR race6='".$spiller1."' ) AND ( race4='".$spiller2."' OR race5='".$spiller3."' OR race6='".$spiller3."' ) ) ) )
Hvad gør det da? altså systemet er sådan at man skal søge på 3v3 kampe, dvs. man skal søge på 3 racer på det ene hold og 3 racer på det andet hold, i dette tilfælde søger man kun på 2 af racerne på det ene hold. Men hvis bare en af dem i databasen har en orc i, vil den acceptere det da både spiller1 og spiller2 finder den race hos en af spillerne. Hjalp det eller?
For det første ligner det elendig database struktur. Man har altså ikke en milliard forskellige race-felter - man har en fremmednøgle og et relationstabel med racerne.
Hvis du gerne vil lave en select, hvor der skal være *mindst* et bestemt antal af pågældende, skal du gøre således:
select tabel1.felt1, tabel2.felt2 from tabel1, tabel2 where tabel1.fremmednøgle=tabel2.nøgle group by tabel1.fremmednøgle having count(tabel1.fremmednøgle)>2
På den måde får du kun dem, som eksistere mere end 1 gang samtidig med at de bliver linket til tabel2.
Men jeg forstår ikke heeeeeeeelt hvad det er du laver...
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.