webForumDet fria alternativet

Filtrera i utskrift från databas

ASP

8 svar · 337 visningar · startad av peppar

Medlem sedan dec. 2001873 inlägg
Frågan#1

Har stött på patrull. Jag har en databas med posterna:

newDatumpubliceras, datum (ex: 2004-04-04 20:20:20)
newDatumUtgar, datum (ex: 2004-04-05- 20:20:20)
newVisaPaSida, text (ex: default, nyheter)

Nu vill jag gå igenom alla posterna och skriva ut dom som är relevanta enligt t.ex denna filtreringsmetod: skriv ut om värdet i fältet newDatumPubliceras INTE är större än newDatumUtgar plus om "default" finns i värdet från fältet newVisaPasida. Så här ser koden ut nu men jag är rädd att den skriver ut alla poster som har "default" i fältet newVisaPaSida men bryr sig inte om att filtrera enligt datum:

<%
'#-- Hämta alla fält i nyhetstabellen
sql	=	"select * from nyheter order by newId asc"
set rs = conndb1.execute(sql)
'#-- Leta igenom alla poster och sortera ut alla texter/nyheter som skall visas på förstasidan
do until rs.eof
if cdate(rs("newDatumPubliceras")) < cdate(rs("newDatumUtgar")) then

'##-- Finns det något som skall skrivas ut på förstasidan?
	newVisaPaSida = rs("newVisaPaSida")
	arrVisa = Split(newVisaPaSida, "," )
	for i = 0 to Ubound(arrVisa)
		if arrVisa(i) = "default" then  %>
			<h3><%response.write rs("newRubrik")%></h3>
			<p><h5><% response.write rs("newIngress1")%></h5></p>
		
			<% 	response.write textSomSkallSkrivasUt
		else
			'#-- Finns det ej något att skriva ut på första sidan.
			response.write "inget att skriva ut"
		end if
		next
	else
'##-- Har bäst föredatumet gått ut så skriv inte ut någon artikel
response.write "inget att skriva ut"
end if

rs.movenext
loop%>
Medlem sedan nov. 20017 144 inlägg
#2

Känns som en kass lösning.
Skapa en tabell som talar om vilka nyheter som skall visas på respektive sida i stället.
Och sedan så ställer du en lite mer nyanserad sql-fråga.
Vad är det för MSDB?

Medlem sedan dec. 2001873 inlägg
#3

Jesper T skrev:

Skapa en tabell som talar om vilka nyheter som skall visas på respektive sida i stället.
Och sedan så ställer du en lite mer nyanserad sql-fråga.

Hur kan det se ut? Eller jagmenar... Hur kan man relatera tabellerna?

JesperT skrev:

Vad är det för MSDB?

MSDB? Access 2000

Medlem sedan nov. 20017 144 inlägg
#4

Visst, måste du ha den där modellen så skulle du kunna göra något såndant hära i sql-satsen:

page = "default"
sql	=	"SELECT * FROM nyheter WHERE now() BETWEEN COALESCE(newDatumPubliceras, now()) AND COALESCE(newDatumUtgar, now()) AND newVisaPaSida LIKE '%"& page &"%' ORDER BY newId"

Annars så är det bästa att du skapar en tabell som heter ex. nyheter_sidor

id | nyhetsid | sida
1 | 1 | default
2 | 1 | search
3 | 2 | default

osv.
Sedan så skapar du en fråga som ser ut ungefär så här:

SELECT * FROM nyheter n 
INNER JOIN nyheter_sidor ns ON n.id=ns.nyhetsid 
WHERE ns.sida = 'default' 
AND now() BETWEEN COALESCE(n.newDatumPubliceras, now()) 
AND COALESCE(n.newDatumUtgar, now()) 
ORDER BY n.newId
Medlem sedan dec. 2001873 inlägg
#5

Nej, nej. Jag måste inte alls ha min modell. Den är nog som du säger rätt så kass för ändamålet.
Jag skall expoerimentera lite med din variant... //tack, för hjälpen (så länge :) )

Medlem sedan dec. 2001873 inlägg
#6

Jag får inte frågan att fungera... Med frågan enlgt JesperT´s förslag får jag

 Feltyp:
(0x80004005)
Odefinierat fel 
/Default.asp, line 16

Skriver jag ut SQLen ser det ut såhär:

SELECT * FROM nyheter n INNER JOIN nyheter_sida ns ON n.id=ns.visId WHERE ns.visSida= 'default' AND now() BETWEEN COALESCE(n.newDatumPubliceras, now()) AND COALESCE(n.newDatumUtgar, now()) ORDER BY n.newId
Medlem sedan nov. 20017 144 inlägg
#7

Access verkar inte hajja COALESCE()

SELECT * FROM nyheter n INNER JOIN nyheter_sida ns ON n.id=ns.visId WHERE ns.visSida= 'default' AND now() BETWEEN n.newDatumPubliceras AND n.newDatumUtgar ORDER BY n.newId

:)

Medlem sedan dec. 2001873 inlägg
#8

Då fungerar frågan i varjefall, men då får jag

Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.

i tabellen nyheter_sida har jag en post som pekar på ett id i tabellen nyheter men får fortfarande detta fel...?

Medlem sedan nov. 20017 144 inlägg
#9

Det där felet beror på att du försöker lista poster som inte finns.

sql="Din sql-fråga..."
set rs = conndb1.execute(sql)

Do until Not rs.eof
    Response.write rs(0) &" | "& rs(1) &"<br>" 'Dina poster som skall visas
    rs.movenext
Loop
rs.close
267 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)