Avatar billede lajer Nybegynder
03. september 2002 - 00:55 Der er 8 kommentarer og
1 løsning

JOIN - Kun en gang ?

Hej!

Er der ikke en funktion der hedder >LEFT JOIN ONCE< eller noget i den dur!


Jeg har en query med 3 LEFT JOIN's og det er pisse upraktisk!

Se evt.
http://www.eksperten.dk/spm/218723
Avatar billede jakoba Nybegynder
03. september 2002 - 03:00 #1
spørgsmål må kun oprettes een gang. så tag og luk dette.

mvh JakobA
Avatar billede jakoba Nybegynder
03. september 2002 - 03:05 #2
Sorry. så gammelt som det andet spm er er det helt ok.
Avatar billede jakoba Nybegynder
03. september 2002 - 03:30 #3
$sql_cmd = "
    SELECT udgiver, SUM(point) AS pts
    FROM  pix
    GROUP BY udgiver
";
$res1 = mysql_query( $sql_cmd ) or die( $sql_cmd ."<br>" .mysql_error());
$pix = array();
while ( $row = mysql_fetch_array( $res1 ) ) {
    $pix[ $row['udgiver'] ] = $row['pts'];
}

$sql_cmd = "
    SELECT udgiver, SUM(point) AS pts
    FROM  source
    GROUP BY udgiver
";
$res1 = mysql_query( $sql_cmd ) or die( $sql_cmd ."<br>" .mysql_error());
$source = array();
while ( $row = mysql_fetch_array( $res1 ) ) {
    $source[ $row['udgiver'] ] = $row['pts'];
}

$sql_cmd = "
    SELECT username, billede
    FROM  users
";
$res1 = mysql_query( $sql_cmd ) or die( $sql_cmd ."<br>" .mysql_error());

while ( $row = mysql_fetch_array( $res1 ) ) {
    $username = $row['username'];
    $billede = $row['billede'];
    $pixpoint = (isset($pix[$username])) ? $pix[$username] : 0;
    $sourcepoint = (isset($source[$username])) ? $source[$username] : 0;
    $ialt = $pixpoint +$sourcepoint;
    // brug værdierne for den bruger
}

mvh JakobA
Avatar billede lajer Nybegynder
05. september 2002 - 08:23 #4
Hvor laver man så tricket med at sortere efter "ialt", "pixpoint" eller "sourcepoint" ??
Avatar billede jakoba Nybegynder
05. september 2002 - 08:35 #5
det gør man bare ikke. :(
I det udtræk du ønsker har du virkelig brug for du sub-selects som mysql ikke har.

Det nærmeste bliver nok at udvide tabellen users med 2 ekstra felter:
    pixpoints og sourcepoints
og så opdatere de felter før du laver det endelige udtræk på users alene.
Avatar billede lajer Nybegynder
05. september 2002 - 08:41 #6
Ahh... det er desværre ikke en løsning!

Kan du ikke komme med en idé jeg selv kan arbejde videre på, til hvordan man kan få det til at køre?
Avatar billede jakoba Nybegynder
05. september 2002 - 09:09 #7
Jeg troede lige jeg var kommet med to sådanne forslag :-)
beklager, jeg kan ikke hjælpe.
Avatar billede jakoba Nybegynder
05. september 2002 - 09:18 #8
Jo her er en rimeligt nem en:
slå tabellerne  pix  og  source  sammen til een tabel hvor kolonnen 'point' er erstattet af 2 kolonner,  'pixpoint'  og  'sourcepoint'
og sørg så for at et af de felter altid er 0.
Avatar billede lajer Nybegynder
05. september 2002 - 09:47 #9
Ja da :)

Ser nu her:

$query = mysql_query("SELECT username FROM users");

while($r = mysql_fetch_array($query)) {

    $qS = mysql_query("SELECT SUM(point) AS point FROM source WHERE udgiver = '$r[username]'");
    $qP = mysql_query("SELECT SUM(point) AS point FROM pix WHERE udgiver = '$r[username]'");

    $sourcpts = @mysql_result($qS, 0, "point");
    $pixpts = @mysql_result($qP, 0, "point");

    $ialt = $sourcepts + $pixpts;

    mysql_query("INSERT INTO temp_point (username, sourcepts, pixpts, ialt) VALUES ('$r[username]', '$sourcepts', '$pixpts', '$ialt')") or die (mysql_error());

}

$query = mysql_query("SELECT users.username, temp_point.ialt AS ialt FROM users LEFT JOIN temp_point ON temp_point.username = users.username ORDER BY ialt DESC") or die (mysql_error());
while($r = mysql_fetch_array($query)) {

    echo $r["username"] . " " . $r["ialt"] . "<br>\n";
   
}

mysql_query("DELETE FROM temp_liste");


Helt optimalt er det godt nok ikke. Men det virker :)
Tak for hjælpen!

Rart at se at der stadigvæk er overtal af seriøse brugere på eksperten.

// Torben Lajer
blarp.dk
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