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 · 241 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)
------------------
Jourhavande @e SweQuake.com
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?
------------------
Jourhavande @e SweQuake.com
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
------------------
essentitia preter non sans multiplicandum
Och för tredje gången ;) vad står det när du skriver ut SQL-strängen?
------------------
Jourhavande @e SweQuake.com
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.
------------------
essentitia preter non sans multiplicandum
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
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?
------------------
essentitia preter non sans multiplicandum
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")%> )
------------------
essentitia preter non sans multiplicandum
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