webForumDet fria alternativet

får inte till min join

9 svar · 392 visningar · startad av WebbisNet

WebbisNetMedlem sedan feb. 20032 027 inlägg
#1

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
#2

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".

WebbisNetMedlem sedan feb. 20032 027 inlägg
#3

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&#65533;&#65533;r    |
|   3 |      1 | [NULL]        | [NULL]        | Sommar  |
|   4 |      1 | [NULL]        | [NULL]        | H&#65533;&#65533;st   |
|   5 |      1 | [NULL]        | [NULL]        | Vinter  |
|   6 |      1 | [NULL]        | [NULL]        | K&#65533;&#65533;rlek |
|   7 |      1 | [NULL]        | [NULL]        | Konst   |
|   8 |      1 | [NULL]        | [NULL]        | Natur   |
+-----+--------+---------------+---------------+---------+
Peter SMedlem sedan dec. 20025 483 inlägg
#4

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.

WebbisNetMedlem sedan feb. 20032 027 inlägg
#5

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
#6
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
WebbisNetMedlem sedan feb. 20032 027 inlägg
#7

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
#8

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.

WebbisNetMedlem sedan feb. 20032 027 inlägg
#9

förslag på hur jag ska skriva? :-)

Peter SMedlem sedan dec. 20025 483 inlägg
#10
<%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
%>
128 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)