Avatar billede zipper20 Nybegynder
13. oktober 2003 - 17:55 Der er 50 kommentarer og
1 løsning

order by, og lidt til

Jeg har en tabel (event) med følgende:

id (autonum.)
month
day
sted
tid
note

Jeg vil gerne have tingene vist sorteret efter, først month og bagefter day... hmm... giver det mening ?
Men jeg vil gerne skille dem lidt ad:

APRIL:
1. tekst
3. tekst

MAJ:
23. tekst
26. tekst

OKTOBER:
12. tekst
---------------

Er der nogen der har fanget min idé ?
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 17:58 #1
Hov...

APRIL:
1. sted  -  note
3. sted  - note

MAJ:
23. sted - note
26. sted - note

OKTOBER:
12. sted - note
Avatar billede repsak Nybegynder
13. oktober 2003 - 18:07 #2
mener at det er
GROUP BY month ORDER BY day
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:08 #3
Hmm... lyder måske som noget... kender det ikke... kan du ikke give mig eksempel ?
Avatar billede repsak Nybegynder
13. oktober 2003 - 18:09 #4
vil skyde på at det er noget ala:

SELECT * FROM dintable GROUP BY month ORDER BY day
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:15 #5
Jeg får den her

Cannot group on fields selected with '*'.
Avatar billede repsak Nybegynder
13. oktober 2003 - 18:19 #6
SELECT month, day, sted, tid, note FROM dintable GROUP BY month ORDER BY day

hvad siger den?
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:20 #7
You tried to execute a query that does not include the specified expression 'day' as part of an aggregate function.
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:21 #8
Ok... den ændrede det lige... hmm..


Microsoft VBScript compilation error '800a0409'

Unterminated string constant

/event.asp, line 7

data.Open "SELECT month, day, sted, tid, note FROM event GROUP BY month ORDER BY day
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:24 #9
Min fejl... havde tekstombrydning i notepad...
Vi er nået hertil

You tried to execute a query that does not include the specified expression 'day' as part of an aggregate function.
Avatar billede repsak Nybegynder
13. oktober 2003 - 18:25 #10
hmmm ...har du
"SELECT month, day, sted, tid, note FROM event GROUP BY month ORDER BY day"
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:27 #11
Yep...
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:27 #12
Hele filen ser sådan ud :

<%@LANGUAGE="VBScript"%>

<!--#include file="connect.asp"-->

<%
Set data = Server.CreateObject ("ADODB.Recordset")
data.Open "SELECT month, day, sted, tid, note FROM event GROUP BY month ORDER BY day", MyConn
%>

<HTML>

<BODY BGCOLOR="#231F2A">

<%
While NOT data.EOF
%>


<% = data.Fields ("month")%> -
<% = data.Fields ("day")%> -
<% = data.Fields ("tid")%><BR>
<% = data.Fields ("sted")%> - <% = data.Fields ("note")%><BR><BR>
   
<%
data.MoveNext
Wend
%>

</BODY>

</HTML>
Avatar billede repsak Nybegynder
13. oktober 2003 - 18:29 #13
hmm sorry, jeg kan ikke hjælpe dig med asp :-/ underligt at sql ikke virker. Kan du foretage en simpel select? "SELECT * FROM event"
?
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:32 #14
Ja, der er ingen fejl...
Avatar billede repsak Nybegynder
13. oktober 2003 - 18:34 #15
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:43 #16
Jeg har klaret det på den gammeldags måde...
"SELECT * FROM event WHERE year='2003' ORDER BY month, day ASC"

Det klarer ikke problemet med afstanden mellem månederne, men der går ... jeg lader lige spørgsmålet stå åbent hvis der er noget deer har idéer...
Avatar billede repsak Nybegynder
13. oktober 2003 - 18:46 #17
hmm måske har jeg misforstået dig... afstanden - hvad mener du?
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:48 #18
hvis der er poster fra januar(month='1'), skriv dem sorteret efter day
<BR><BR>
hvis der er poster fra februar(month='2'), skriv dem sorteret efter day
<BR><BR>

APRIL:
1. sted  -  note
3. sted  - note

MAJ:
23. sted - note
26. sted - note

OKTOBER:
12. sted - note

På den alm. måde kan jeg ikke styre hvornår month skifter...
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 18:49 #19
1. april  -  sted  -  note
3. april  -  sted  -  note
23. maj  -  sted  -  note

osv...
Avatar billede netro Nybegynder
13. oktober 2003 - 18:55 #20
Set rs = Conn.Execute("SELECT * FROM event WHERE year='2003' ORDER BY month, day ASC")

While Not rs.EOF
  If ForrigeMaaned <> rs("month") Then
      Response.Write "<h2>" & MonthName(rs("month")) & "</h2>"
  Else
      Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"
  End If
  ForrigeMaaned = rs("month")
  rs.MoveNext
Wend
Avatar billede terry Ekspert
13. oktober 2003 - 18:57 #21
zipper>You cant!

This is about the closes you will get (
SELECT * FROM event WHERE year='2003' ORDER BY month, day

(ASC is default)

Then in CODE you check each record to see if the month has changed, if it has then you start with a new MONTH header.
Avatar billede repsak Nybegynder
13. oktober 2003 - 18:58 #22
du skal nok ikke regne med at kunne løge dit problem med ét sql kald... medmindre du bruger VIEW-delen...
f.eks.
spørg efter sorteret udtræk (som ovenfor)
while (sålænge der er data i databasen)
for(int tæller = 1 ; ...)
  hvis maaned = tæller udskriv
ellers udskriv <br /><br /> continue

//bare en idé
Avatar billede terry Ekspert
13. oktober 2003 - 18:59 #23
Ig you use GROUP BY then you will STILL get

1. april  -  sted  -  note
3. april  -  sted  -  note
23. maj  -  sted  -  note

because you want to see all days then days CAN NOT be GROUPED and therefore its pointless using GROUP BY!
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:00 #24
Hmm... forvirrende...

Kan jeg ellers ikke bare lave 12 udtræk ? Jeg ved godt det er en lamer løsning, men om ikke andet en løsning ? *GG*
"SELECT * FROM event WHERE year='2003', month='1' ORDER BY day ASC"

"SELECT * FROM event WHERE year='2003', month='2' ORDER BY day ASC"
Avatar billede netro Nybegynder
13. oktober 2003 - 19:01 #25
Hvis jeg ikke tager meget fejl, gør min løsning det, du beder om (som Terry også beskriver). Og ja, ASC kan du bare undlade, da det er default.
Avatar billede repsak Nybegynder
13. oktober 2003 - 19:03 #26
du kan godt lave 12 sql kald, men det som jeg og netro skitserer burde med lidt snilde kunne klare det
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:04 #27
Jeg prøver lige netro's så...
Avatar billede terry Ekspert
13. oktober 2003 - 19:04 #28
zipper it would be MUCH faster if you made ONE select and ALL 12 months!
Then in code check to see if the month in th ecurrent record has changed.
Netro's example is VERY close to what you want!
Avatar billede terry Ekspert
13. oktober 2003 - 19:05 #29
yes netro,exactly!
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:08 #30
Okay... der skete noget... jeg har lavet et par tests i min db med 4 måneder som kommer frem, men kun månedsnavnene... ikke resten ?

januar
april
maj
december
Avatar billede netro Nybegynder
13. oktober 2003 - 19:09 #31
Det lyder som om, du har en GROUP BY på!?
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:10 #32
Nope....

<%@LANGUAGE="VBScript"%>

<!--#include file="connect.asp"-->

<%
Set data = Server.CreateObject ("ADODB.Recordset")
Set rs = MyConn.Execute("SELECT * FROM event WHERE year='2003' ORDER BY month, day ASC")
%>

<HTML>

<BODY BGCOLOR="#231F2A">
<FONT FACE="Verdana" SIZE="1" COLOR="#ffffff">
<%
While Not rs.EOF
  If ForrigeMaaned <> rs("month") Then
      Response.Write "<h2>" & MonthName(rs("month")) & "</h2>"
  Else
      Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"
  End If
  ForrigeMaaned = rs("month")
  rs.MoveNext
Wend
%>
</FONT>
</BODY>

</HTML>

Det du skrev... eller har jeg lavet noget forkert ?
Avatar billede terry Ekspert
13. oktober 2003 - 19:15 #33
You need to write day and sted also when month changes


No idea how you do that in ASP :o)
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:17 #34
Det står der da i koden nu, så vidt jeg kan se... jeg er ikke så hård til ASP dog... men det ser ud til at give mening... det virker bare ikke helt...
Avatar billede terry Ekspert
13. oktober 2003 - 19:19 #35
While Not rs.EOF
  If ForrigeMaaned <> rs("month") Then
      Response.Write "<h2>" & MonthName(rs("month")) & "</h2>"
      Response.Write rs("day") & ". " & rs("sted") & " - " & rs
  Else
      Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"
  End If
  ForrigeMaaned = rs("month")
  rs.MoveNext
Wend
Avatar billede terry Ekspert
13. oktober 2003 - 19:19 #36
While Not rs.EOF
  If ForrigeMaaned <> rs("month") Then
      Response.Write "<h2>" & MonthName(rs("month")) & "</h2>"
      Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"  Else
      Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"
  End If
  ForrigeMaaned = rs("month")
  rs.MoveNext
Wend
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:21 #37
Microsoft VBScript compilation error '800a0412'

Must be first statement on the line

/event03.asp, line 18

Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"  Else
Avatar billede terry Ekspert
13. oktober 2003 - 19:21 #38
not a very good text editor :o)

While Not rs.EOF
  If ForrigeMaaned <> rs("month") Then
      Response.Write "<h2>" & MonthName(rs("month")) & "</h2>"
      Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>" 
  Else
      Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"
  End If
  ForrigeMaaned = rs("month")
  rs.MoveNext
Wend
Avatar billede terry Ekspert
13. oktober 2003 - 19:22 #39
I know NOTHING about ASP, but it should give you an idea.
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:23 #40
Der kom 4 måneder med 1 post under hver, men jeg har 10 poster i alt, men 4 forskellige måneder...

januar
05. et ssss - ting

april
12. et sted - 12-april

maj
12. ude - 12-maj

december
24. jul - 24-dec
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:24 #41
Det er med vilje at datoen står til sidst nogle steder... det er ikke scriptet... :o)
Avatar billede netro Nybegynder
13. oktober 2003 - 19:28 #42
Ja, min fejl. Du kan bare gøre sådan:

While Not rs.EOF
  If ForrigeMaaned <> rs("month") Then
      Response.Write "<h2>" & MonthName(rs("month")) & "</h2>"
  End If
  Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"
  ForrigeMaaned = rs("month")
  rs.MoveNext
Wend
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:30 #43
Ingen ændring... stadig kun én post pr. måned...
Avatar billede netro Nybegynder
13. oktober 2003 - 19:38 #44
Og hvordan ser hele dit recordsæt så ud?

Set rs = MyConn.Execute("SELECT * FROM event WHERE year='2003' ORDER BY month, day")

While Not rs.EOF
  Response.Write rs("month") & "<br>"
  rs.MoveNext
Wend
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:39 #45
Kopi fra fil:
Set rs = MyConn.Execute("SELECT * FROM event WHERE year='2003' ORDER BY month, day")
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:40 #46
Resultat af
While Not rs.EOF
  Response.Write rs("month") & "<br>"
  rs.MoveNext
Wend
:

01
04
05
12
Avatar billede terry Ekspert
13. oktober 2003 - 19:44 #47
Where is the output THIS line line
Response.Write rs("day") & ". " & rs("sted") & " - " & rs("note") & "<br>"

Try
While Not rs.EOF
  Response.Write rs("month") & " - " & rs("day") "<br>"
  rs.MoveNext
Wend
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:46 #48
Microsoft VBScript compilation error '800a0401'

Expected end of statement

/event03.asp, line 16

Response.Write rs("month") & " - " & rs("day") "<br>"
Avatar billede netro Nybegynder
13. oktober 2003 - 19:47 #49
Så er der jo også kun fire poster!!?
Avatar billede netro Nybegynder
13. oktober 2003 - 19:47 #50
Response.Write rs("month") & " - " & rs("day") & "<br>"
Avatar billede zipper20 Nybegynder
13. oktober 2003 - 19:50 #51
There we go... jeg slettede alle poster i db'en og skrev nogle nye... nu virker den...

Mange tak skal I have... ;-)
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
Kurser inden for grundlæggende programmering

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