I ena tabellen tblMotive har jag kortkat som är kategorin
I den andra tabellen tblKortKategori har jag kat som är kategorierna
I tabell 1 har jag en post med kategori 1 och i andra tabellen ligger alla 8 kategorier
Det jag vill är att när jag skriver ut alla kategorier så ska det bara stå en 1-a på antal i den första kategorin och en nolla på de andra eftersom det inte finns nån post för dem i tblMotive
Set mRS1 = ObjConn.Execute("SELECT count(*) as antal FROM tblmotive FULL JOIN tblKortKategori on tblmotive.Kortkat=tblKortKategori.kat")
med denna sql får jag
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-5.0.45-community-nt]Unknown column 'tblmotive.Kortkat' in 'on clause'
/Ekort/Default.asp, line 14
Nu är det
test [1 kort] Vår [1 kort]
Sommar [1 kort] Höst [1 kort]
Vinter [1 kort] Kärlek [1 kort]
Konst [1 kort] Natur [1 kort]
Jag vill ha
test [1 kort] Vår [0 kort]
Sommar [0 kort] Höst [0 kort]
Vinter [0 kort] Kärlek [0 kort]
Konst [0 kort] Natur [0 kort]
Peter SMedlem sedan dec. 20025 483 inlägg Felmeddelandet säger att det inte finns någon kolumn som heter "Kortkat" i tblMotive.
select k.<kategorinamn>, count(*) as antal
from tblkortkategori k left join tblmotive m
on m.kortkat = k.kat
group by k.<kategorinamn>
...ändra i ovanstående dels "<kategorinamn>" till det kolumnnamn som innehåller namnet på kategorin, dels "kortkat" till det kolumnnamn som motsvarar "kat".
Detta är tabellen tblMotive
+---------+----+--------------+--------------------+-----------------+---------+--------+
| Kortkat | id | motive | motiveSmall | sender | special | cardOK |
+---------+----+--------------+--------------------+-----------------+---------+--------+
| 1 | 1 | testkort.png | testkort_small.png | [email]stefan@stene.nu[/email] | 0 | 0 |
+---------+----+--------------+--------------------+-----------------+---------+--------+
och detta är kortkategori
+-----+--------+---------------+---------------+---------+
| kat | visa | visaDatumFran | visaDatumTill | katNamn |
+-----+--------+---------------+---------------+---------+
| 1 | 1 | [NULL] | [NULL] | test |
| 2 | 1 | [NULL] | [NULL] | V��r |
| 3 | 1 | [NULL] | [NULL] | Sommar |
| 4 | 1 | [NULL] | [NULL] | H��st |
| 5 | 1 | [NULL] | [NULL] | Vinter |
| 6 | 1 | [NULL] | [NULL] | K��rlek |
| 7 | 1 | [NULL] | [NULL] | Konst |
| 8 | 1 | [NULL] | [NULL] | Natur |
+-----+--------+---------------+---------------+---------+
Peter SMedlem sedan dec. 20025 483 inlägg Då skall det se ut så här:
select k.katNamn, count(*) as antal
from tblkortkategori k left join tblmotive m
on m.kortkat = k.kat
group by k.katNamn
...men, som sagt, av felmeddelandet att döma verkar det inte som att kolumnen "kortkat" existerar i tblmotive.
med
Set mRS1=objConn.Execute("select k.kat, count(*) as antal from tblkortkategori k left join tblmotive m on m.kortkat = k.kat group by k.kat")
är det bara ettor i alla antal fortfarande, är det nåt jag har missförstått?
Peter SMedlem sedan dec. 20025 483 inlägg select k.kat, sum(case when m.kortkat is null then 0 else 1 end) as antal
from tblkortkategori k left join tblmotive m
on m.kortkat = k.kat
group by k.kat
samma resultat, jag får försöka snoka lite efter vad som är fel. Visar här hur själva kärnan i koden ser ut
<%Set counter=ObjConn.Execute("select Count(id) as Skickade from tblKort")
Set motiveRS=ObjConn.Execute("select Count(id) as Antal from tblMotive where cardOK=0")
Set markeRS=ObjConn.Execute("select Count(id) as Antal from tblStamps")
Set mRS = ObjConn.Execute("SELECT * FROM tblKortKategori where visa=1")
Set mRS1=objConn.Execute("select k.kat, sum(case when m.kortkat is null then 0 else 1 end) as antal from tblkortkategori k left join tblmotive m on m.kortkat = k.kat group by k.kat")
Set sRS=ObjConn.Execute("select * from tblMotive")%>
<%
Dim x, page
page="index.asp"
Do until mRS.eof
If x Mod 3 = 0 Then Response.write "</tr><tr>" : x = 1
Response.write "<td><a class=""menu"" href="""& page &"?kat="& mRS("kat") &"""><b>"& mRS("katNamn") &" ["& mRS1("antal") &" kort]</b></a></td>"
x=x+1
mRS.MoveNext
Loop
%>
Peter SMedlem sedan dec. 20025 483 inlägg Ja, alltså, du skriver ju ut samma record hela tiden från mRS1. Du måste stega framåt i det också.
Sedan är det ingen bra lösning du har på G där. mRS och mRS1 borde du försöka slå ihop till en fråga.
förslag på hur jag ska skriva? :-)
Peter SMedlem sedan dec. 20025 483 inlägg <%Set counter=ObjConn.Execute("select Count(id) as Skickade from tblKort")
Set motiveRS=ObjConn.Execute("select Count(id) as Antal from tblMotive where cardOK=0")
Set markeRS=ObjConn.Execute("select Count(id) as Antal from tblStamps")
'Set mRS = ObjConn.Execute("SELECT * FROM tblKortKategori where visa=1")
Set mRS1=objConn.Execute("select k.kat, k.katnamn, sum(case when m.kortkat is null then 0 else 1 end) as antal from tblkortkategori k left join tblmotive m on m.kortkat = k.kat group by k.kat, k.katnamn")
Set sRS=ObjConn.Execute("select * from tblMotive")%>
<%
Dim x, page
page="index.asp"
Do until mRS1.eof
If x Mod 3 = 0 Then Response.write "</tr><tr>" : x = 1
Response.write "<td><a class=""menu"" href="""& page &"?kat="& mRS1("kat") &"""><b>"& mRS1("katNamn") &" ["& mRS1("antal") &" kort]</b></a></td>"
x=x+1
mRS1.MoveNext
Loop
%>