webForumDet fria alternativet

riktigt FET SQL

2 svar · 268 visningar · startad av Nöff

NöffMedlem sedan nov. 2003569 inlägg
#1

Gokväll allesammans

Jag har lite problem som jag undrar om nån kan hjälpa mig med.

Jag har en tabell:

Tabell KUNDER:
id
handelsekod
namn
adress
etc etc.

Session["anvandarID"] = mitt id, alltså JAG
-------------------------------------------------------------------------
SELECT TOP 1 * FROM kunder,bokade WHERE

kunder.handelsekod=1 AND
kunder.ID=bokade.kundID AND
OR
kunder.datum<>" + Session["anvandarID"] + " AND
OR
kunder.handelsekod=1 AND
kunder.ID=bokade.kundID AND
OR
kunder.handelsekod=1 AND
kunder.ID=bokade.kundID AND

ORDER BY bokade.bokaddatumtid DESC
-------------------------------------

Engine^Medlem sedan dec. 20002 861 inlägg
#2

Jag har bara testat och bryta ut och förkorta lite i din SQL-fråga, så den borde returnera samma resultat. Jag skulle försöka lösa problemet genom att ta bort hela WHERE-satsen och sedan kontrollera att var del för sig returnerar rätt och sedan baka ihop dom och kontrollera vidare.

SELECT TOP 1 *
FROM kunder k
INNER JOIN bokade b
  ON b.kundID = k.ID
WHERE
  k.handelsekod = 1 AND
  ((
    b.anvandarID = " + Session["anvandarID"] + "
    AND b.bokaddatumtid < #" + DateTime.Now + "#
    AND b.personlig
  )
  OR
  (
    b.anvandarID <> " + Session["anvandarID"] + "
    AND b.bokaddatumtid < #" + DateTime.Now.AddHours(-1) + "#
    AND b.personlig
  )
  OR
  (
    b.anvandarID <> " + Session["anvandarID"] + "
    AND b.bokaddatumtid < #" + DateTime.Now + "#
    AND NOT b.personlig
  )
  OR
  (
    b.anvandarID = " + Session["anvandarID"] + "
    AND b.bokaddatumtid < #" + DateTime.Now + "#
    AND NOT b.personlig
  ))
ORDER BY b.bokaddatumtid DESC
NöffMedlem sedan nov. 2003569 inlägg
#3

Ja, jag testade det. Varje del returnerar rätt. Men jag kom på vad som är fel. det är så att ligger det tex en personlig bokning från en anvandare, samt en opersonlig bokning från en annan anvandare på samma kund. Så kommer den OR som hittar kunden först att returnera bokningen. Och det är där det blir fel. Man måste på nåt sätt tvinga varje OR att ta det absolut högsta datumet för varje kund oavsett vad. Hur gör man det måntro?, med MAX(bokade.bokaddatumtid) kanske?. Men jag vet inte riktigt hur jag ska integrera den?. Nån som vet?.

Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb