Får inte till det...

ASP

22 svar · 278 visningar · startad av Inferis

Medlem sedan sep. 2000667 inlägg
Trådstart#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)

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?

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

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?

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.

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,

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?

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")%> )
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

254 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)