Avatar billede truthorn Nybegynder
26. juni 2002 - 15:02 Der er 4 kommentarer og
1 løsning

DATE i en JOIN

Dette er en forløber af et andet spørgsmål jeg netop har fået svar på.

Jeg har en række kontakter (tabel: kontakter) og der knytter sig en række noter til disse kontakter (mange noter pr. kontakt)...

Jeg ønsker at lave en oversigt, hvor man kan se den sidste note for hver kontakt.

Denne sætning virker (desværre viser den den FØRSTE note for personen - og ikke den SIDSTE.) - den sidste note kan afgøres ud fra min kolonne: noter.timestamp.

-----------------------
SELECT *, MIN(noter.timestamp)
FROM kontakter

LEFT JOIN noter ON kontakter.kontakterid=noter.kontakt_id
LEFT JOIN firma ON firma.firmaid=kontakter.firma_id

GROUP BY kontakter.kontakterid, kontakter.fornavn, kontakter.efternavn, noter.kontakt_id
-----------------------

Er der nogen, der kan hjælpe mig, så jeg får den sidst ankomne note?
Avatar billede hansk Nybegynder
26. juni 2002 - 20:59 #1
Har jeg ikke lige hjulpet dig med noget lignende i dag?

Hvis du vil se den sidst ankomne note skal du skrive:

SELECT kontakter.kontakterid, kontakter.fornavn, kontakter.efternavn,
MAX(noter.timestamp)
FROM kontakter
LEFT JOIN noter ON kontakter.kontakterid=noter.kontakt_id
LEFT JOIN firma ON firma.firmaid=kontakter.firma_id
GROUP BY kontakter.kontakterid, kontakter.fornavn, kontakter.efternavn

Max vil give dig den største værdi i feltet, så hvis dette er udfyldt med dato/tid for insert af noten vil den give dig sidst ankomne note.
Avatar billede hansk Nybegynder
26. juni 2002 - 21:00 #2
Husk at angive kolonnenavne i din selekt, ellers får du meget svært ved at styre dine grupperinger.
Avatar billede truthorn Nybegynder
28. juni 2002 - 10:00 #3
Jo - det er mig du for nylig har hjulpet - problemet er, at med den SQL-statement får jeg kun fornavn og efternavn, men f.eks. ikke firmanavn "firma.firmanavn" - er det fordi de skal med i den der SELECT-statement? (f.eks. "*") eler ?

Hvis jeg så vælger *, max(noter.notertimestamp) så finder den IKKE de seneste noter, men de første noter, og der sker ingen ændring om jeg skriver MIN eller MAX - kan du forklare det?
Avatar billede hansk Nybegynder
28. juni 2002 - 11:55 #4
Når du bruger * i en gruppe select vil du få grupperingen ned på laveste niveau. MAX bliver beregnet som maxværdi indenfor gruppen. Gruppen vil normalt være ned på den enkelte række i tabellen.
Hvis du vil have firmanavn med i ovenstående SELECT, skriver du:

SELECT firma.firmanavn, kontakter.kontakterid, kontakter.fornavn, kontakter.efternavn,MAX(noter.timestamp)
FROM kontakter
LEFT JOIN noter ON kontakter.kontakterid=noter.kontakt_id
LEFT JOIN firma ON firma.firmaid=kontakter.firma_id
GROUP BY firma.firmanavn, kontakter.kontakterid, kontakter.fornavn, kontakter.efternavn

Gør det til en vane altid at selekte på kolonnenavne, det vil spare dig for mange bekymringer.
Avatar billede truthorn Nybegynder
28. juni 2002 - 12:06 #5
Ja - jeg kan se, hvad du mener, men den gør det desværre stadig :-/
Her er et uddrag af koden som den absolut ser ud nu....

---------------------------
SELECT firma.firmanavn, kontakter.kontakterid, kontakter.kontakterfornavn, kontakter.kontakterefternavn, noter.noterdato,
MAX(noter.notertimestamp)

FROM kontakter

LEFT JOIN noter ON kontakter.kontakterid=noter.kontakter_kontakterid
LEFT JOIN firma ON firma.firmaid=kontakter.firma_firmaid

WHERE
kontakter.ansvarlig_brugere_id='$brugerid'

GROUP BY kontakter.kontakterid, kontakter.kontakterfornavn, kontakter.kontakterefternavn
ORDER BY $tabel_kolonne $order
---------------------------

WHERE-tingen (dette er fordi bestemte brugere er ansvarlige for bestemte kontakter)
ORDER BY er så den kan køre ASC/DESC for de forskellige grupperinger

Som du forklarer det, så burde dette betyde, at den tager den sidste nye note (nærmest som en ORDER BY noter.notertimestamp DESC) - dvs. den tager den sidste nye note (har checket at den laver timestampet - og det agerer rigtigt :-/ )

Kan du se nogle fejl i koden?
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