Avatar billede totalpc Seniormester
11. juli 2011 - 08:41 Der er 8 kommentarer og
1 løsning

Min SQL sætning sorterer ikke

Hej
Jeg har en (for mig) voldsom SQL sætning. Det er i forbindelse med en søgning og den finder fint det den skal.
Mit problem er at den er fuldstændig ligeglad med om jeg ved min sidste ORDER BY 3, PostedTime ASC om til DESC. Det kan jeg ikke gennemskue hvorfor! Kan du?


SELECT 'MESSAGE' AS [Kategori], m.ID, m.ID AS [MessageID], m.Message AS [tekst], m.GuestBookID AS [MainID], m.Name AS [Navn], m.PostedTime, g.GuestBookName FROM [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE m.GuestBookID = g.ID AND ( (GuestBookID IN ( 3, 4, 5, 8, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31 ) AND PATINDEX('%cutter%',Message)>0 )) UNION SELECT 'SVAR' AS [Kategori], s.svarID AS [ID], m.ID AS [MessageID], svar as [tekst], s.MessagesID AS [MainID], s.navn AS [Navn], s.PostedTime, g.GuestBookName FROM [dbo].[T_Svar] s, [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE s.MessagesID = m.ID AND m.GuestBookID = g.ID AND s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ( ( m.GuestBookID IN( 3, 4, 5, 8, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31 ) AND PATINDEX('%cutter%',s.svar)>0)) ORDER BY 3, PostedTime ASC
Avatar billede paro Nybegynder
11. juli 2011 - 09:33 #1
Jeg kan ikke forstå, at den der ikke har givet en SQL-fejl. Prøv til sidst at skriv s.PostedTime i stedet for bare PostedTime
Avatar billede totalpc Seniormester
11. juli 2011 - 09:48 #2
Hvis jeg bruger s.postedtime så får jeg en fejl:

The multi-part identifier "s.postedtime" could not be bound.
ORDER BY items must appear in the select list if the statement contains a UNION
Avatar billede paro Nybegynder
11. juli 2011 - 09:56 #3
så prøver vi lige igen med m.PostedTime
Avatar billede totalpc Seniormester
11. juli 2011 - 10:03 #4
Den fejler ikke, men er stadig fuldstændig ligeglad med ASC eller DESC. Den viser ældste først uanset hvad
Avatar billede paro Nybegynder
11. juli 2011 - 10:10 #5
Nu er jeg lidt ude i nogle forsøg. Men det er lidt svært, når jeg ikke selv kan afprøve. Men du kan prøve det her.

SELECT 'MESSAGE' AS [Kategori], m.ID, m.ID AS [MessageID], m.Message AS [tekst], m.GuestBookID AS [MainID], m.Name AS [Navn], m.PostedTime, g.GuestBookName FROM [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE m.GuestBookID = g.ID AND ( (GuestBookID IN ( 3, 4, 5, 8, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31 ) AND PATINDEX('%cutter%',Message)>0 )) ORDER BY m.PostedTime UNION SELECT 'SVAR' AS [Kategori], s.svarID AS [ID], m.ID AS [MessageID], svar as [tekst], s.MessagesID AS [MainID], s.navn AS [Navn], s.PostedTime, g.GuestBookName FROM [dbo].[T_Svar] s, [dbo].[TblMessages] m, [dbo].[TblGuestBooks] g WHERE s.MessagesID = m.ID AND m.GuestBookID = g.ID AND s.MessagesID = m.ID AND m.GuestBookID = g.ID AND ( ( m.GuestBookID IN( 3, 4, 5, 8, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31 ) AND PATINDEX('%cutter%',s.svar)>0))
Avatar billede totalpc Seniormester
11. juli 2011 - 10:20 #6
Jeg er lige blevet opmærksom på at jeg jo først sorterer på ORDER BY 3, PostedTime ASC dvs MessageID og indenfor det så virker det. Beklager at jeg har spildt din tid :S
Avatar billede bauerdata Nybegynder
11. juli 2011 - 11:27 #7
SELECT 'MESSAGE' AS [Kategori],
        m.ID,
        m.ID AS [MessageID],
        m.Message AS [tekst],
        m.GuestBookID AS [MainID],
        m.Name AS [Navn],
        m.PostedTime,
        g.GuestBookName
  FROM [dbo].[TblMessages] m,
      [dbo].[TblGuestBooks] g
  WHERE m.GuestBookID = g.ID
    AND (
          (    GuestBookID IN ( 3, 4, 5, 8, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31 )
            AND PATINDEX('%cutter%',Message)>0
          )
        )
UNION
  SELECT 'SVAR' AS [Kategori],
        s.svarID AS [ID],
        m.ID AS [MessageID],
        svar as [tekst],
        s.MessagesID AS [MainID],
        s.navn AS [Navn],
        s.PostedTime,
        g.GuestBookName
  FROM [dbo].[T_Svar] s,
      [dbo].[TblMessages] m,
      [dbo].[TblGuestBooks] g
  WHERE s.MessagesID = m.ID
    AND m.GuestBookID = g.ID
    AND s.MessagesID = m.ID
    AND m.GuestBookID = g.ID
    AND (
          (    m.GuestBookID IN( 3, 4, 5, 8, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31 )
            AND PATINDEX('%cutter%',s.svar)>0
          )
        )
ORDER BY 3, 7 ASC
Avatar billede totalpc Seniormester
11. juli 2011 - 15:13 #8
Er det ok at jeg tager point tilbage? Der var slet ikke noget problem, blot mig der ikke vidste hvad jeg egentlig havde gang i :)
Avatar billede paro Nybegynder
11. juli 2011 - 15:19 #9
Ja selvfølgelig
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