Avatar billede leif Seniormester
14. juli 2008 - 22:07 Der er 9 kommentarer og
1 løsning

Samle 2 SQL sætninger

Hej,

Idag har jeg:
        $result_tilmeldte = mysql_query("SELECT * FROM tilmeldte WHERE typeid = '$typeid'") or die ("Henter Tilmeldte: Der skete følgende fejl".mysql_error()."");
    $numtilmeldte = mysql_num_rows($result_tilmeldte);

    while ($row_tilmeldte = mysql_fetch_array($result_tilmeldte))
    {

    $result_medlem = mysql_query("SELECT * FROM medlemmer WHERE id = '$row_tilmeldte[medlemid]'") or die ("Henter Medlemmer: Der skete følgende fejl".mysql_error()."");
    $row_medlem = mysql_fetch_array($result_medlem);
   
    echo $row_medlem[fornavn]."<br>";

    }


Kan det gøres mere optimalt eller er det lige meget med at skulle samle de 2 SQL sætninger til 1 ? Der er vist noget INNER JOIN, men kan bruge eller er det mig som er gal på den ?

På forhånd tak

/Leif
Avatar billede jakobdo Ekspert
14. juli 2008 - 22:17 #1
SELECT t.*,m.* FROM tilmeldte t INNER JOIN medlemmer m ON t.medlemid = m.id WHERE t.typeid = '$typeid'

Det er dog ikke altid en INNER JOIN vil være en forbedring, rent performance mæssigt.
Avatar billede leif Seniormester
14. juli 2008 - 22:19 #2
Hvad skulle så være argumentet være for at gøre det ?
Avatar billede coderdk Praktikant
14. juli 2008 - 23:06 #3
Med de rette indexer er inner joins i reglen fine. Inner joins er som regel gode til performance i forhold til outer joins som kan være grumme, specielt med forskellige where og order/group by...

Du skal bare have index på tilmeldte felter medlemid og typeid samt på medlemmer id (sikkert primary key, så andet index ikke nødvendigt)...

Man kan se hvordan ens query opfører sig ved at bruge EXPLAIN efterfulgt af din SQL-sætning...
Avatar billede janpolsen Nybegynder
18. juli 2008 - 13:40 #4
$sql = "SELECT t.*, m.* FROM tilmeldte AS t
INNER JOIN medlemmer AS m ON (m.id = t.medlemid)
WHERE t.typeid = '{$typeid}'";

$res = mysql_query($sql) or die ("Henter Tilmeldte: Der skete følgende fejl".mysql_error()."");
...

Så skulle du gerne ende op med alle medlemmer, som også optrædder i din tilmeldte-tabel og som har typeid = '{$typeid}'.
Avatar billede leif Seniormester
18. juli 2008 - 13:49 #5
Hvad er forskellen på de 2 sætninger andet end at du har nogen paranteser og tuborgklammer på ?
Avatar billede coderdk Praktikant
18. juli 2008 - 13:53 #6
ingen forskel
Avatar billede janpolsen Nybegynder
18. juli 2008 - 13:56 #7
...at jeg ikke har læst jakobdo første svar ordentlig og havde overset hans SQL der :(.

Der er faktisk ingen forskel udover parenteserne og tuborgklammerne (som jeg dog vil anbefale)...

Min fejl, sorry...
Avatar billede leif Seniormester
09. august 2008 - 18:49 #8
Virker fint, smid et svar.
Avatar billede jakobdo Ekspert
09. august 2008 - 19:07 #9
Svar!
Avatar billede jakobdo Ekspert
09. august 2008 - 19:31 #10
Takker for point.
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