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]
22 svar · 278 visningar · startad av Inferis
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.
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]
Testa att skriva ut SQL-satsen till HTML... brukar vara lättare att se vad som är fel då... (Response.write)
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?
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?
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]
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
Och för tredje gången vad står det när du skriver ut SQL-strängen?
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.
Hmm. Koden ovan är för Access va? jag kör detta på mssql.
Nej, den är inte Accessspecifik utan fungerar också för MS-SQL.
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,
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å.
Att det ska vara så pillemariskt!!!
Får inte till det!
Hur ser din kod ut nu? Använder du group by eller inte?
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")%>"> • <%=samla_alla("cats.category")%></font></a><font class="menyant"> (<%=samla_alla("counting")%> )
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")%> )
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!