webForumDet fria alternativet

Får inte till det...

ASP

22 svar · 241 visningar · startad av Inferis

Medlem sedan sep. 2000667 inlägg
Frågan#1

Nån som vill hjälpa mig? Jag försöker räkna hur många annonser som finns i respektive underkategori. Men det vägrar fungera! Får bara värdet noll, så jag antar att jag inte lyckas hämta något värde?

<%
' Lista kategorier
SQLan = "select * from smclcategory where pid = 0 order by category asc"
Set samla_alla = samlaannonser.Execute(SQLan)

'räkna annonser

	smclquery1 = "select count (id) as counting from smclads where category = "& samla_alla("id")&" and validate = 1"
	set rakna_alla = samlaannonser.execute(smclquery1)
While Not samla_alla.EOF

%>

Annonserna ligger i tabellen "smclads" och kategorierna ligger i "smclcategory".

Skriver ut kategorierna så här:
<a href="default.asp?action=badscat&catid=<%=samla_alla("id")%>"> � <%=samla_alla("category")%></a> (<%=rakna_alla("counting")%> )

Den hittar kategorierna som den ska, men kan inte räkna hur många annonser som finns i dem.

Medlem sedan sep. 2000667 inlägg
#2

Den där punkten är ett &-tecken i länken.
Inget fel på länken alltså. Bara här i forumet tydligen?

[Redigerat av Inferis den 25 feb 2001]

Medlem sedan dec. 19998 577 inlägg
#3

Testa att skriva ut SQL-satsen till HTML... brukar vara lättare att se vad som är fel då... (Response.write)

------------------
Jourhavande @e SweQuake.com

Medlem sedan sep. 2000667 inlägg
#4

Får fortfarande värde noll! :-(

Kan felet vara att den inte kan hämta informationen från samla_alla("id") som ligger i en annan tabell?

Medlem sedan dec. 19998 577 inlägg
#5

Vad stod det i SQLsträngen du fick ut när du skrev ut den?

Jag antar att du har mer kod än den du visar... så det är inget fel på loopen?

------------------
Jourhavande @e SweQuake.com

Medlem sedan sep. 2000667 inlägg
#6

Eftersom den listar alla kategorier så borde ju loopen fungera tycker man??
Den ska bara lista "topp-kategorierna", men visa hur många annonser som finns inne totalt i varje "topp-kategori".

Det är ju när den ska räkna antal annonser som finns i underkategorierna som det blir fel. Får värde noll.

koden med HTML bortklippt:
<%
Set samlaannonser = Server.CreateObject("ADODB.Connection")
samlaannonser.Open "Provider=SQLOLEDB; Server=XXX.XX.XXX.XXX; Initial Catalog=XXXX; User ID=XXXX; Password=XXXX"

'räkna annonser totalt

smclquery2 = "select count (id) as counting2 from smclads where validate = 1"
set rakna_totalt = samlaannonser.execute(smclquery2)
    antal = counting2

' Lista kategorier
SQLan = "select * from smclcategory where pid = 0 order by category asc"
Set samla_alla = samlaannonser.Execute(SQLan)

'räkna annonser

smclquery1 = "select count (id) as counting from smclads where category = "& samla_alla("id")&" and validate = 1"
set rakna_alla = samlaannonser.execute(smclquery1)

While Not samla_alla.EOF
%>
Annonser:<br>
<a target="home" href="default.asp?action=badscat&catid=<%=samla_alla("id")%>">&<%=samla_alla("category")%></a> (<%=rakna_alla("counting")%> )

<%
samla_alla.MoveNext
Wend
%>

<%samla_alla.Close
set samla_alla = nothing%>
<%rakna_alla.Close
set rakna_alla = nothing%>
<%rakna_totalt.Close
set rakna_totalt = nothing%>
<%samlaannonser.Close
set samlaannonser = nothing%>

[Redigerat av Inferis den 25 feb 2001]

Medlem sedan dec. 200012 464 inlägg
#7

Som det är nu så räknar du enbart antalet annonser för den första kategorin. Om du flyttar in det i loopen

While Not samla_alla.EOF
   smclquery1 = "select count (id) as counting from smclads where category = "& samla_alla("id")&" and validate = 1"
set rakna_alla = samlaannonser.execute(smclquery1)
...

Alternativt kan man slå ihop det till en fråga med en group by

------------------
essentitia preter non sans multiplicandum

Medlem sedan sep. 2000667 inlägg
#8

Det funkade inte... :-(

Men ska nog kolla igenom, för nåt fel måste jag kanske gjort i SQL:en?

Medlem sedan dec. 19998 577 inlägg
#9

Och för tredje gången ;) vad står det när du skriver ut SQL-strängen?

------------------
Jourhavande @e SweQuake.com

Medlem sedan sep. 2000667 inlägg
#10

Det står ju bara en nolla?

response.write samla_alla("id") & "<br>"

Eller jag är ute o seglar?

Medlem sedan dec. 19996 721 inlägg
#11

Ja, lite.... :)

SQL-frågan ligger i smclquery1

skriv ut den med

response.write smclquery1

Men en group by-fråga är ett bättre sätt...

SELECT COUNT(ads.id) AS counting,cats.[kolumnen med kategorinamnet] FROM smclads ads,smclcategory cats WHERE ads.category=cats.category GROUP BY cats.[kolumnen med kategorinamnet]

Då får du allt på en gång.

Medlem sedan sep. 2000667 inlägg
#12

Hmm. Koden ovan är för Access va? jag kör detta på mssql.

Medlem sedan dec. 200012 464 inlägg
#13

Nej, den är inte Accessspecifik utan fungerar också för MS-SQL.

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20002 836 inlägg
#14

hello,

tror att detta e lite fel:

antal = counting2

Anatar att counting2 INTE är en variabel.

Det bör stå:

antal = rakna_totalt("counting2")

cya,

------------------
Private Function OutPut(ByRef sString)
OutPut = "Who gives ..." & sString
End Function

Medlem sedan sep. 2000667 inlägg
#15

antal = counting2 är inget som är kvar.
Det funkar att räkna totala antalet annonser. Det är när man ska räkna antalet annoner i subkategorierna som jag bara får värdet noll.

SQL: Kontakt

smclads
- id
- memid
- category
- validate
- date
osv

smclcategory
- id
- category
- pid

När man listar kategorierna, så har subkategorierna samma värde som toppkategoriets id.
Alltså:

id category pid

1 | Säljes | 0
2 | köpes | 0
3 | Skänkes | 0
4 | Säljes_båt | 1
5 | Köpes_båt | 2
6 | Skänkes_båt | 3
7 | Köpes_eka | 2
8 | Köpes_motor | 2

Pid 0 är en toppkategori alltså.

Medlem sedan sep. 2000667 inlägg
#16

Att det ska vara så pillemariskt!!!
Får inte till det!

Medlem sedan dec. 200012 464 inlägg
#17

Hur ser din kod ut nu? Använder du group by eller inte?

------------------
essentitia preter non sans multiplicandum

Medlem sedan sep. 2000667 inlägg
#18

Det mesta av koden är som innan, använder numera

	smclquery1 = "SELECT COUNT(ads.id) AS counting,cats.category FROM smclads ads,smclcategory cats WHERE ads.category=cats.id GROUP BY cats.category"

Men får bara felmeddelandet:

ADODB.Recordset fel '800a0cc1'

Objektet kunde inte hittas i mängden med det begärda namnet eller numret.

meny_test.asp, line 85

Line 85:

<a href="default.asp?action=badscat&catid=<%=samla_alla("cats.id")%>">&nbsp;&#149;&nbsp;<%=samla_alla("cats.category")%></font></a><font class="menyant"> (<%=samla_alla("counting")%> )
Medlem sedan dec. 200012 464 inlägg
#19

Om du vill ha med id i recordsetet så får du skriva såhär

smclquery1 = "SELECT COUNT(ads.id) AS counting,cats.category as category, cats.id as id FROM smclads ads,smclcategory cats WHERE ads.category=cats.id GROUP BY cats.category,cats.id"

Det där att du skriver

samla_alla("cats.category") är jag osäker på hur det fungerar. Om du använder as i selectsatsen så borde det inte vara något probelm att skriva

<a href="default.asp?action=badscat&catid=<%=samla_alla("id")%>"> • <%=samla_alla("category")%></font></a><font class="menyant"> (<%=samla_alla("counting")%> )

------------------
essentitia preter non sans multiplicandum

Medlem sedan sep. 2000667 inlägg
#20

Det funkar ju! Nästan...

Nu skrivs det ut att det finns 1 annons i alla underkategorier, men det är fel.

Hämtar den rätt data egentligen?
Kolla ovan hur min databas ser ut.

"smclads - category" ska ha samma värde som "smclcategory - pid".
Sen ska "smclcategory - pid" jämföras med "smclcategory - id" för att se vilken toppkategori den tillhör.

Jämför min db ovan. Alla underkategorier i "köpes" har "pid = 2" för att toppkategorin "Köpes" har "pid = 0 ".
Värdet "pid = 0" i smclcategory visar att det är en toppkategori.

Nu har jag nog snurrat till det ordentligt! :OO

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)