Avatar billede djsteiner Nybegynder
30. juni 2009 - 01:10 Der er 35 kommentarer og
1 løsning

udskive en gruppe fra sql db

Hej jeg står og kunne godt bruge noget hjælp til at få udskrevet en gruppe af referencer fra sql database.

Mine referencer er delt op i forskellige års tal 2008,2009 osv

og det jeg så gerne ville var at det skulle blive udskrevet ud i forskellige grupper efter årstal.

håber dette er forståligt

måske det kunne lAVES NOGET MED (SQL GROUP BY statement)
Avatar billede loukas Mester
30. juni 2009 - 01:25 #1
Er det ikke bare
SELECT * FROM 'DIN TABEL' ORDER BY 'DIT ÅRSTAL'
Avatar billede djsteiner Nybegynder
30. juni 2009 - 21:26 #2
På den måde kommer årstallene ud i en bestemt rækkefølge.

Men hvis der så er nogle bestemte referencer der  skal udskrives ud under 2007 og nogle andre som tilhøre et andet årstal hvordan gør man så det ??
Avatar billede djsteiner Nybegynder
01. juli 2009 - 21:00 #3
Jeg har selv prøvet at lave et db udtræk på denne her måde:

sql = "SELECT * FROM  refrencer,year where refrencer.dato=year.id and r_id="&sid&"  order by år "
                    'response.Write sql'
                    'response.End()
                    set rs = Conn.Execute(sql)

Det gav ikke lige det jeg ville frem til, da der nu kommer
et årstal ud hver gang det kommer en refence.

Det ser sådan her ud.

2007
ref

2007
ref

Osv.


Det jeg gerne ville var at udskrive mine referencer i nogle grupper sådan at de bliver samlet under forskellige årstal.

Noget i stil med det her 

2007
ref1 ref4

2008
ref3 ref5

2009
ref2 ref6

Håber dette er forståligt på forhånd tak for hjælpen.
Avatar billede keysersoze Guru
01. juli 2009 - 21:28 #4
Det du søger kan ikke løses vha SQL alene - selvfølgelig skal din SQL inkludere en ORDER BY, men resten skal håndteres i din ASP-kode. Benyt fx en variabel til at holde styr på hvilkten årstal du er i gang med at udskrive - indeholder variablen det samme årstal som den record du er ved a behandle udskriver du ikke årstallet, ellers udskriver du årstallet og opdaterer din variabel.
Avatar billede djsteiner Nybegynder
01. juli 2009 - 22:26 #5
Har selv fundet en løsning den ser sådan her ud

sql = "SELECT * FROM refrencer inner join year on year.yid=refrencer.dato WHERE r_id="&sid&" GROUP BY yid DESC"
Avatar billede djsteiner Nybegynder
01. juli 2009 - 23:02 #6
jeg fik vist lige hænderne op lidt for tidligt da det endnu ike virker efter hensigten, da den nu kun udskiver en reference godt nok under det rigtige årstal
Avatar billede keysersoze Guru
01. juli 2009 - 23:29 #7
medmindre du laver fx en Stored Procedure og danner dit eget specifikke resultat derinde skal du som tidligere skrevet håndtere udskrivning i ASP som foreslået i #4
Avatar billede djsteiner Nybegynder
01. juli 2009 - 23:33 #8
håndtere udskrivning i ASP ?? med if og else eller ??
Avatar billede keysersoze Guru
01. juli 2009 - 23:40 #9
ja - lige præcis.

var = ""
if var <> rs("something") then
  response.write rs("something")
  var = rs("something")
end if
response.write rs("otherstuff")
Avatar billede djsteiner Nybegynder
01. juli 2009 - 23:43 #10
Har du et eksempel på det du mener ??
Avatar billede keysersoze Guru
01. juli 2009 - 23:54 #11
ja - skrevet i #9
Avatar billede djsteiner Nybegynder
04. august 2009 - 22:22 #12
Hej så er sommerferien forbi og det er tid til at tage fat i noget asp igen det var ikke sådan du kunne forklare mig hvordan svar #9 virker ???

På forhånd tak
Avatar billede keysersoze Guru
05. august 2009 - 17:39 #13
kan det prøve; gruppen (something) udskrives kun hvis den er forskellig fra den sidst udskrevne gruppe (var) - det øvrige indhold under gruppen udskrives altid (otherstuff). For at det giver mening skal det hele (pånær var = "") ind i en løkke.
Avatar billede djsteiner Nybegynder
05. august 2009 - 23:39 #14
Det jeg har lavet ser sådan her ud:

<%

sql = "SELECT * FROM refrencer,year where year.yid=refrencer.dato and r_id="&sid&""
                    'response.Write sql'
                    'response.End()
                    set rs = Conn.Execute(sql)
                   
var = ""

                    do until rs.eof%>
                   
<%

if var <> rs("år") then
  response.write rs("år")
  var = rs("år")
end if
%>



<a href="default.asp?page=ref&refid=<%=rs("refid")%>"><img src="images/<%=rs("org_pic")%>" /></a><br /><br />


   
<%
                            rs.movenext
                            loop
                           
                        %>
Avatar billede keysersoze Guru
06. august 2009 - 17:37 #15
og resultatet er?
Avatar billede djsteiner Nybegynder
08. august 2009 - 23:09 #16
Nu udskriver den

2009 Ref

2008 Ref

2007 Ref

Men problemet  er så at jeg har sat databasen tablerne sådan op at den gerne skulle udskrive flere referencer under samme årstal.

For eksempel hvis jeg opsætter databasen til ar alle referencerne skal udskrives under 2007 så udskriver en kun en reference ud sådan her:

2007 Ref
Avatar billede keysersoze Guru
09. august 2009 - 16:57 #17
umiddelbart fejler løkken ikke noget men har du testet om din SQL returnerer det den skal?
Avatar billede djsteiner Nybegynder
09. august 2009 - 19:46 #18
jeg er ikke helt med på hvad du mener med SQL returnerer det den skal?
Avatar billede keysersoze Guru
09. august 2009 - 21:52 #19
for at løse problemet må vi jo indsnævre mulighederne for hvor problemet kan ligge - derfor forsøger jeg at finde ud af om det resultat databasen returnere er det ønskede resultat eller ej. Gør databasen ikke det er det din SQL vi skal kigge på og ikke kode.
Avatar billede djsteiner Nybegynder
09. august 2009 - 22:27 #20
jeg går ud fra mener om sqlen gør  det jeg gerne vil have den skal gøre??

sql = "SELECT * FROM refrencer,year where year.yid=refrencer.dato and r_id="&sid&""

som det ser ud nu gør den ikke det jeg vil have den skal gøre da den gerne skulle skrive referencer ud i grupper under hver deres årstal.

Jeg har også prøvet med SQL GROUP BY Statement men dog unden held.
Avatar billede keysersoze Guru
09. august 2009 - 22:46 #21
så ved vi jo hvor fejlen er nu - det var det jeg søgte :)

Som du selv er inde på i #5 skal du kigge på joins; http://www.w3schools.com/Sql/sql_join.asp
Avatar billede djsteiner Nybegynder
10. august 2009 - 00:23 #22
Hvis jeg bruger denne
sql = "SELECT * FROM refrencer inner join year on year.yid=refrencer.dato WHERE r_id="&sid&" GROUP BY yid DESC"

som jeg brugte i spørsmål 5 så giver dette ikke nogen forskel
Avatar billede djsteiner Nybegynder
10. august 2009 - 00:31 #23
Med hvis man prøver at fjerne GROUP BY yid DESC så skriver den også alle refencerne ud under det rigtig årstal men skriver bare 2007 ud for hver gang der kommer en ny REF.
Avatar billede keysersoze Guru
10. august 2009 - 09:18 #24
group by er også en forkert tilgang - du skal benytte order by.

Du skal sikre at din if-sætning sammenligner samme typer - dvs en string med en string eller en int med en int, fx;

var = "0"
if cint(var) <> cint(rs("something")) then

eller

if cstr(var) <> cstr(rs("something")) then
Avatar billede djsteiner Nybegynder
10. august 2009 - 14:27 #25
Nu har jeg prøvet med order by yid ASC og

if cint(var) <> cint(rs("something")) then

da det er int type inde i databasen tabelen.

Jeg også langt det på nettet som det ser ud nu på adressen:

http://www.djsteiner.dk/default.asp?page=vis&gid=2&sid=1
Avatar billede keysersoze Guru
10. august 2009 - 18:05 #26
prøv at kom med din kode som den ser ud nu.
Avatar billede djsteiner Nybegynder
10. august 2009 - 22:00 #27
<%
sql = "SELECT * FROM s_menu where s_id="&sid
set rs = Conn.Execute(sql)
do until rs.eof%>

<%=rs("title")%><br  /><br  />

<%
                            rs.movenext
                            loop
                           
                        %>
                       
                   
                       

<%

sql = "SELECT * FROM refrencer inner join year on year.yid=refrencer.dato WHERE r_id="&sid&"  ORDER BY dato ASC"
                    'response.Write sql'
                    'response.End()
                    set rs = Conn.Execute(sql)
                   
var = "0"

                    do until rs.eof%>
                   
<%

if cint(var) <> cint(rs("dato")) then
  response.write rs("dato")
  var = rs("dato")
end if
response.write rs("år")
%>



<a href="default.asp?page=ref&refid=<%=rs("refid")%>"><img src="images/<%=rs("org_pic")%>" /></a><br /><br />


   
<%
                            rs.movenext
                            loop
                           
                        %>
Avatar billede keysersoze Guru
11. august 2009 - 16:10 #28
Hvad er forskellen på rs("dato") som du benytter i din sammenligning og rs("år")? Hvis "år" er gruppen er det vel det du skal benytte i din if?
Avatar billede djsteiner Nybegynder
11. august 2009 - 17:20 #29
dato er det tabelfelt i databasen hvor referencerne bliver soteret alt efter hvilket årstal den ligge under.

1 2007

2 2008 osv.

år =  sleve årstallet.
Avatar billede keysersoze Guru
11. august 2009 - 17:45 #30
er det ikke lidt dobbeltkonfekt? årstallet er vel nok?

anyway - jamen, så virker scriptet jo også ud fra hvad jeg kan se; tallene 1 og 2 udskrive én gang hver fordi de står inde i din if-sætning og årstallet samt selve referencen udskrives hver gang fordi de står uden for if-sætningen. Skal det være anderledes må du sætte koden op ud fra hvad der skal udskrives - fx årstallet ind i if-sætningen.
Avatar billede djsteiner Nybegynder
11. august 2009 - 18:01 #31
Ja det kan jeg godt se nu virker det jo som det skal det er hvis bare mig der har været noget forvirret.

Jeg skal hvis til at øve mig i noget íf or else.

Men vad var det nu lige denne del  if sætningen betyder??

if cint(var) <> cint(rs("dato")) then



mange tak for hjælpen

Jeg kan lige lave et nyr spørgsmål så du kan få point.

Jeg har nemlig også et andet spørgsmål.

Her er koden som den ser ud nu

<%

sql = "SELECT * FROM refrencer inner join year on year.yid=refrencer.dato WHERE r_id="&sid&"  ORDER BY år ASC"
                    'response.Write sql'
                    'response.End()
                    set rs = Conn.Execute(sql)
                   
var = "0"

                    do until rs.eof%>
                   
<%

if cint(var) <> cint(rs("dato")) then
  response.write rs("år")
  var = rs("dato")
end if

%>



<a href="default.asp?page=ref&refid=<%=rs("refid")%>"><img src="images/<%=rs("org_pic")%>" /></a><br /><br />


   
<%
                            rs.movenext
                            loop
                           
                        %>
Avatar billede keysersoze Guru
11. august 2009 - 23:24 #32
hvilken del tænker du på? hvis du tænker på cint så tag et kig her; http://www.w3schools.com/VBScript/func_cint.asp
Avatar billede djsteiner Nybegynder
11. august 2009 - 23:34 #33
det var bare hvis man skulle skrive en komentar til  hvordan  if sætning fungere.

Men linket kan jeg også bruge Takker.

Ville du gerne have Point??
Avatar billede keysersoze Guru
11. august 2009 - 23:44 #34
dokumentation er vist et af mine svage punkter - men kort kan det vel skrives om if-sætningen sådan; sammenligner dato på foregående værdi, hvis forskellig så udskriv årstal.

Point skal gives i et nyt spm da dette allerede er lukket.
Avatar billede djsteiner Nybegynder
11. august 2009 - 23:58 #35
supper tak.

jeg laver lige et nyt spørgsmål
Avatar billede djsteiner Nybegynder
12. august 2009 - 00:01 #36
Jeg har oprettet et nyt spørgsmål

http://www.eksperten.dk/spm/883377
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