Peter Farsinsen wrote:
>
> "Kristian Damm Jensen" <kristian-damm.jensenRE@MOVEcgey.com> skrev..."
>
> > Hvis det skal give mening at lave en outer join, skal betingelsen
> > spmskema_besvaret_af.brugerid <> $_SESSION[medlemmer_brugerid] ikke stå
> > i where-delen, men i join-delen.
> >
> > Og der er ingen pointe i at angive både
> >
> > spmskema.skema_id = spmskema_besvaret_af.skema_id_ref
> > og spmskema.skema_id <> spmskema_besvaret_af.skema_id_ref
>
> Som du nok har regnet ud er det første gang jeg sån' har forsøgt at sætte
> mig ind i joins, og ja jeg vidste faktisk ikke at man kunne bruge AND i join
> sektionen ... Derfor kom jeg frem til nedenstående, som ikke fungere, og dog
> alligevel bedre end før ...
>
> $sql = "SELECT spmskema.skema_id, (spmskema.$_SESSION[medlemmer_sprog]) AS
> tekst
> FROM spmskema LEFT JOIN spmskema_besvaret_af
> ON spmskema.skema_id <> spmskema_besvaret_af.skema_id_ref
> AND spmskema_besvaret_af.brugerid <> $_SESSION[medlemmer_brugerid]";
>
> (Er det sån' jeg skal stille koden op ?)
"Skal" er et stort ord. Men det er bestemt et fremskridt for
læseligheden.
Jeg vil bare tilføje at hele historien med $sql= og "" er irrelevant i
SQL-sammenhæng. De har kun med værtssproget (i dit tilfælde php, så vidt
jeg husker) at gøre.
> Ovenstående giver altså output, men selvfølgelig ikke det rigtige ... hvis
> en post i spmskema har id 20, og der i spmskema_besvaret_af er flere poster
> hvor skema_id_ref indholder 20 returnere query recorden fra spmskema flere
> gange, hvordan jeg skal WHERE mig ud af den kan jeg ikke lige se...
Nej. Du kan ikke lave en where, der redder dig ud af, at grundtanken er
forkert.
Her kunne jeg skrive en mindre roman, om *hvorfor* det du gør er
forkert, men det vil jeg afholde mig fra.
> > Jeg er ikke 100% sikker på at jeg forstår beskrivelsen, men som den står
> > her, virker det mere logisk at bruge en not exists frasortere de rækker
> > du ikke vil se.
> >
> > SELECT spmskema.skema_id
> > , (spmskema.$_SESSION[medlemmer_sprog]) AS tekst
> > FROM spmskema
> > WHERE NOT EXISTS
> > (SELECT * FROM spmskema_besvaret_af
> > WHERE spmskema.skema_id=spmskema_besvaret_af.skema_id_ref
> > AND spmskema_besvaret_af.brugerid =
> > $_SESSION[medlemmer_brugerid] )
>
> Ud fra ovenstående at dømme har du forstået beskrivelsen 100% ... det er
> NETOP hvad jeg skal have returneret!
>
> > Så vil jeg bare håbe, at du ikke bruger MySQL, thi den understøtter ikke
> > sub-selects. I så fald må du ud i esoteriske omskrivninger.
Det kan
> > godt lade sig gøre at udføre det samme ved hjælp af en outer join, men
> > det er ikke helt let gennemskueligt.
>
> Selvfølgelig bruger jeg MySQL ... og ja jeg hørte om subselects i går, men
> desværre er det først med i MySQL fra version 4.1 og den er så vidt jeg ved
> ikke ude i stable endnu, så jeg tvivler på at min host vil installere det :/
Nuvel, vi lader nåde gå for ret.
(Jeg har da også selv en MySQL
installeret til at lege med.)
Her er en version, der ikke kræver subselects. Til gengæld må du så gøre
mig (og dig selv) den tjeneste at købe et IDG-hæfte eller lignende, der
giver en introduktion til SQL.
SELECT spmskema.skema_id
, (spmskema.$_SESSION[medlemmer_sprog]) AS tekst
FROM spmskema
LEFT OUTER JOIN spmskema_besvaret_af
ON spmskema.skema_id=spmskema_besvaret_af.skema_id_ref
AND spmskema_besvaret_af.brugerid = $_SESSION[medlemmer_brugerid]
WHERE spmskema_besvaret_af.skema_id_ref is NULL
Dette burde have samme funktionalitet som mit første forslag. Men i
modsætning til mit første forslag, som jeg er rimelig sikker på, så vil
jeg ikke stole på det her, før det er testet...
--
Kristian Damm Jensen | Feed the hungry at
www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.