Avatar billede sthen Nybegynder
23. maj 2002 - 00:32 Der er 4 kommentarer og
2 løsninger

DISTINCT og left JOIN

Har et forum, hvor der bl.a. vises de seneste besvarelser. Til dette formål bruger jeg følgende:

<?
    $db = mysql_connect("mysql2.dht.dk", "xxxxxx", "xxxxxx");
    mysql_select_db("xxxxxx", $db);

$res = mysql_query("SELECT * FROM forumsvar left JOIN forumsporgsmaal ON forumsporgsmaal.id=forumsvar.spm ORDER BY forumsvar.id DESC LIMIT 0,5");
while($data = mysql_fetch_array($res)) {

echo "<TD CLASS=\"brugeroplv\">";

    $str = $data[overskrift];
    if (strlen($str) > 23) $str = substr($str, 0, 23) . "...";
    echo "<A HREF=\"svarside.php?id=$data[id]\" TITLE=\"$data[overskrift]\">".$str."</A>";

echo "</TD></TR>";

}
?>

Det fungerer i og for sig også godt nok, MEN hvis der har været indlæg på samme spørgsmål imellem de fem seneste indlæg, kommer linket op to gange, og DET ville jeg gerne undgå.

Har prøvet at hekse med noget i stil med:

$res = mysql_query("SELECT DISTINCT * FROM forumsvar left JOIN forumsporgsmaal ON forumsporgsmaal.id=forumsvar.spm ORDER BY forumsvar.id DESC LIMIT 0,5");

men det fungerer ikke, og

$res = mysql_query("SELECT DISTINCT spm FROM forumsvar left JOIN forumsporgsmaal ON forumsporgsmaal.id=forumsvar.spm ORDER BY forumsvar.id DESC LIMIT 0,5");

dur heller ikke.

Selvfølgelig kan jeg køre et array inde i et andet array, men kan det hele ikke klares i ét select stadig med left join eller lign.
Avatar billede sthen Nybegynder
23. maj 2002 - 01:01 #1
Går i seng nu.
Håber at I har kringlet den for mig når jeg vågner.
Avatar billede hansk Nybegynder
23. maj 2002 - 07:37 #2
Jeg kan ikke se hvordan dine tabeller ser ud, men du kan prøve med flg:

SELECT forumsporgsmaal.id, max(forumsvar.datetime) as MaxTid
FROM forumsporgsmaal, forumsvar
WHERE forumsporgsmaal.id=forumsvar.spm
GROUP BY forumsporgsmaal.id
ORDER BY forumsporgsmaal.id DESC LIMIT 5

idet jeg går ud fra at du har tidspunkt stående i dit forumsvar.
Avatar billede sthen Nybegynder
23. maj 2002 - 10:03 #3
Og hvor kommer så DISTINCT ind i alt dette ???
Avatar billede hansk Nybegynder
23. maj 2002 - 10:06 #4
DISTINCT er en klausul du kan sætte på din SQL hvis du har identiske rækker i dit resultatset.
Avatar billede sthen Nybegynder
23. maj 2002 - 12:58 #5
Ja men hvor sætter jeg den så på i ovenstående SELECT?

Kan man evt. skrive:

$res = mysql_query("SELECT * FROM forumsvar left JOIN DISTINCT forumsporgsmaal ON forumsporgsmaal.id=forumsvar.spm ORDER BY forumsvar.id DESC LIMIT 0,5");
while($data = mysql_fetch_array($res))
Avatar billede sthen Nybegynder
23. maj 2002 - 23:37 #6
>> hansk

Du fik da ført mig på sporet af det rigtige, men SELECTEN kom til at se ud som følger:

SELECT * FROM forumsvar left JOIN forumsporgsmaal ON forumsporgsmaal.id=forumsvar.spm GROUP BY forumsporgsmaal.id ORDER BY forumsvar.id DESC LIMIT 0,5

Men som du ser, var der jo ikke grund til at blande tiden ind i det hele, men det kan jo også være svært at vide, hvordan systemet hænger sammen.
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Teknisk systemansvarlig / ingeniør inden for taktisk datalink

Netcompany A/S

Test Consultant

Politiets Efterretningstjeneste

AI/ML udvikler i PET