Avatar billede danic Nybegynder
24. marts 2002 - 14:24 Der er 3 kommentarer og
1 løsning

Forbedringer til MySQL forspørgelse

1) Jeg har her et PHP script der er splittet op i to selvstændige forespørgsler, men det burde kunne lade sig gøre med en enkelt forespørgsl, da det ville kunne give mig en markant forbedre hastigheden.
2) plus at få resulatat ud i alfabetisk rækkefølge.

Min funktion ser sådan her ud:

function FilmFunktion($dvdbasen, $table, $usernumber, $fstLine, $choose) {
    //følsomme db-oplysninger fjernet!
    //$db = aabn_forbindelse_og_vaelgdb($dvdbasen);
    $query = "SELECT extraID,dvdmarkedType FROM extra where userID='$usernumber' AND (dvdmarkedType='1' OR dvdmarkedType='2')";
    $sql_result = mysql_query($query,$db);

    // det første punkt i dropdown listen
    if ($choose == "") {
        $option_block = "<OPTION value=\"0\" SELECTED>$fstLine</OPTION>";
    }
    else {
        $option_block = "";
    }

    //loop over alle film!
    while (list($newHits, $dvdmarked) = mysql_fetch_row($sql_result)) {
        echo"$dvdmarked";
        $filmnavnresult = mysql_query("SELECT orgTitle FROM film INNER JOIN filmextraRelation ON filmextraRelation.filmID=film.filmID where filmextraRelation.extraID='$newHits'");
        $filmnavn = mysql_result($filmnavnresult,0);
        $option_block .= "<OPTION value=\"$newHits\" ";
        if ($choose == $filmnavn) {
            $option_block .= "SELECTED";
        }
        $option_block .= ">$filmnavn</OPTION>\n";
    }
    return $option_block;
}

Mine tabeller ser sådan her ud:

Tabel: extra med felter extraID int(11), userID int(11), dvdmarkedType (smallint)

Tabel: user med felter userID int(11)...

Tabel: film med felter filmID  int(11), orgTitle  varchar(100)

Tabel: filmextraRelation med fleter extraID int(11), filmID  int(11)
Avatar billede starfish Nybegynder
27. marts 2002 - 08:35 #1
Jeg kan ikke lige overskue hvad du vil have din query til at returnere, men hvis du skriver hvad du skal bruge fra hvilke tabeller kan jeg eller en anden nok hjælpe dig :-)
Avatar billede danic Nybegynder
27. marts 2002 - 17:52 #2
Vil det give bedre performance med en Join istedet for at looper over filmene. Problemet er at der er tre tabeller der bliver involveret, det betyder en kæmpe join-tabel a'la den her:

SELECT extra.extraID, extra.dvdmarkedType, film.orgTitle FROM film, extra
INNER JOIN
filmextraRelation ON filmextraRelation.filmID=film.filmID INNER JOIN
filmextraRelation ON filmextraRelation.extraID=extra.extraID where
filmextraRelation.extraID='$newHits' and
extra.userID='$usernumber' AND (extra.dvdmarkedType='1' OR
extra.dvdmarkedType='2')
Avatar billede starfish Nybegynder
31. marts 2002 - 18:04 #3
SELECT orgTitle FROM film, filextraRelation, extra, user where filmextraRelation.extraID=extra.extraID AND film.filmID = filmextraRelation.filmID AND extra.userID = user.userID AND user.userID = '1' AND(extra.dvdmarkedType=1 OR extra.dvdmarkedType=2) ORDER BY orgTitle
Avatar billede starfish Nybegynder
31. marts 2002 - 18:04 #4
det var et svar :-)
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
Computerworld tilbyder specialiserede kurser i database-management

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