Avatar billede zantiago Nybegynder
24. april 2003 - 20:52 Der er 18 kommentarer og
1 løsning

Hvis kategorien er tom skal den ikke vises!! PROBLEMER

Hejsa Eksperter!

Jeg har virkelig brug for jeres hjælp nu!!

Jeg har tre tabeller:
[kategorier]
kat_id (nøglen)
navn

[varegrupper]
Vargr_id (nøgle)
Kat_id (oplyser hvilken kategori varegruppen tilhører)
navn

[varer]
Vare_id (nøgle)
Vargr_id (oplyser hvilken varegruppe varen tilhører)
navn
beskrivelse
osv...


Jeg har ca 20 kategorier, med tilhørende varegrupper.

Hvis en kategori har 5 varegrupper tilknyttet, og der i  ingen af varegrupperne er varer - Så skal kategorien ikke vises.

Hvordan gør jeg det da varerne ikke umiddelbart har tilknytning til kategorierne?

Håber I kan hjælpe!!!

/Bruhn
Avatar billede eagleeye Praktikant
24. april 2003 - 21:20 #1
Du laver en SQL sætning så den kun vælger de varegrupper som der er vare i og så vælger de kategorier som der er varegrupper. I samme SQL, det skan gøres med JOIN af tabeller. Så skal DISTINCT med fordi den eller vil vælde kategorinavnet lige så mange gange som der er vare..:


SQL = "SELECT DISTINCT kategorier.navn FROM "
SQL = SQL & "(kategorier RIGHT JOIN varegrupper ON kategorier.kat_id = varegrupper.kat_id) "
SQL = SQL & "RIGHT JOIN varer ON varegrupper.vargr_id = varer.vargr_id;"

Set rs = ConnectionObject.Execute(SQL)
'udskriv kategorinanve:
do while not rs.EOF
  Response.write rs("navn") & "<br>"
  rs.Movenext
loop
Avatar billede mjall0w Nybegynder
24. april 2003 - 21:21 #2
if rs("DITNAVN") <> "" then
response.write "det den nu skal udskrive"
end if

Kan godt være det skal være lidt mere kompliceret end det der men prøv ;)

/Mjall0w-
Avatar billede -master-d- Nybegynder
24. april 2003 - 21:22 #3
Du gør sådan her :

<%
'Først henter du kategorierne
Set rs = Conn.Execute("SELECT * FROM kategorier")
if not (rs.bof or rs.eof) then
do while not rs.eof
Set rs2 = Conn.Execute("SELECT * FROM varegrupper WHERE kat_id = "& rs("kat_id") &"")
if not (rs2.bof or rs2.eof) then
do while not rs2.eof
'Så finder den ud af om der findes nogen varer i varegruppen.
Set rs3 = Conn.Execute("SELECT * FROM varer WHERE Vargr_id= "& rs2("Vargr_id") &"")
if not (rs3.bof OR rs3.eof) then
'så vises denne linie kun hvis der rent faktisk er nogen varer i gruppen.
Response.write rs("navn")& ":" & rs2("navn") & ":" rs3("navn") & "," rs3("beskrivelse")
end if
rs2.movenext
loop
end if
rs.movenext
loop
end if
%>
Avatar billede -master-d- Nybegynder
24. april 2003 - 21:23 #4
Men det er den lange måde, og den er ikke den hurtigste.
Avatar billede zantiago Nybegynder
25. april 2003 - 12:57 #5
<%
SQL = "SELECT DISTINCT kategorier.navn FROM "
SQL = SQL & "(kategorier RIGHT JOIN varegrupper ON kategorier.kategori_id = varegrupper.kategori_id) "
SQL = SQL & "RIGHT JOIN varer ON varegrupper.varegruppe_id = varer.varegruppe;"

Set rs = ConnectionObject.Execute(SQL)
'udskriv kategorinanve:
do while not rs.EOF
  Response.write rs("navn") & "<br>"
  rs.Movenext
loop

%>

Får følgende fejl:

Microsoft VBScript runtime error '800a01a8'

Object required: ''

/market/kategorier.asp, line 57
Avatar billede zantiago Nybegynder
25. april 2003 - 12:58 #6
Linie 57 : Set rs = ConnectionObject.Execute(SQL)
Avatar billede eagleeye Praktikant
25. april 2003 - 13:00 #7
Du skal rette ConnectionObject til nanvet på det object du bruger til at connecte til din database.
Avatar billede zantiago Nybegynder
25. april 2003 - 13:01 #8
Normalt skriver jeg bare: Set RS = Server.CreateObject("ADODB.RecordSet")

Er det det?
Avatar billede eagleeye Praktikant
25. april 2003 - 13:04 #9
Ja den linje bør du også havde med. Den definere variablen rs som et Recordset object.

Så bruger du sikker rs.Open SQL,conn,  til at udføre din SQL??
Avatar billede zantiago Nybegynder
25. april 2003 - 13:07 #10
<%
Set RS = Server.CreateObject("ADODB.RecordSet")

SQL = "SELECT DISTINCT kategorier.navn FROM "
SQL = SQL & "(kategorier RIGHT JOIN varegrupper ON kategorier.kategori_id = varegrupper.kategori_id) "
SQL = SQL & "RIGHT JOIN varer ON varegrupper.varegruppe_id = varer.varegruppe;"

Set rs = Conn_market.Execute(SQL)
'udskriv kategorinanve:
do while not rs.EOF
  Response.write rs("navn") & "<br>"
  rs.Movenext
loop

%>

Fejl:
Microsoft VBScript runtime error '800a01a8'

Object required: 'DRIVER={Microsoft Ac'

/market/kategorier.asp, line 59
Avatar billede eagleeye Praktikant
25. april 2003 - 13:12 #11
Conn_market er din connection streng?? så skal du bruge rs.Open
Hvis man skriver Ser rs = conn.Execute(SQL) så skal Conn være en åben connection til databasen og ikke en connection streng.:

Så ret:
Set rs = Conn_market.Execute(SQL)

Til:
rs.Open SQL, conn_market,1
Avatar billede zantiago Nybegynder
25. april 2003 - 13:15 #12
Du er kongen :o)

EN anden ting hvad betyder det der ,1??

Jeg har også set det , 1, 3 ??? Se mystisk ud...
Avatar billede eagleeye Praktikant
25. april 2003 - 13:17 #13
De er forskellig parametre til rs.Open hvor man kan bestemme om man må tilføje nye records eller recordsetet skal være readonly. Det kan du se mere om her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adoce31/html/ado30ref_28.asp
Avatar billede zantiago Nybegynder
25. april 2003 - 13:18 #14
Tak :o)
Avatar billede zantiago Nybegynder
25. april 2003 - 13:26 #15
Sorry - SKriver lige igen...

Hvis jeg nu skal bruge mere end bare navnet?? Hvad så??? også : kategori_id (til linket) og billede_id (så jeg kan hente fra min image tabel...)
Avatar billede eagleeye Praktikant
25. april 2003 - 13:31 #16
Ja det skulle du kunne gøre

SQL = "SELECT DISTINCT kategorier.navn, kategorier.billede_id FROM "
SQL = SQL & "(kategorier RIGHT JOIN varegrupper ON kategorier.kategori_id = varegrupper.kategori_id) "
SQL = SQL & "RIGHT JOIN varer ON varegrupper.varegruppe_id = varer.varegruppe;"
Avatar billede zantiago Nybegynder
25. april 2003 - 13:32 #17
Super tak - Virker perfekt...
Avatar billede zantiago Nybegynder
25. april 2003 - 14:49 #18
Arghhh - Glemte det næst vigtigste!!!

Nu er kategorierne skjult, hvis alle varegrupperne er tomme.

Klikker jeg nu på en af kategorierne, skal den faktisk kun vise dem der er noget i! Det kan da ik være så besværligt som det foregående...

Nu ser det bare sådan her ud:

<%
Set RS_varegrupper = Server.CreateObject("ADODB.RecordSet")
RS_varegrupper.open "Select * From [varegrupper] WHERE kategori_id = " & Request("kategori_id") &"", Conn_market, 1, 3

i = 0
while not RS_varegrupper.eof


if i mod 5 = 0 then
response.write "</tr><tr>"
end if
Response.write "<td>"%>
<center>
<%
Set RS_picture = Server.CreateObject("ADODB.RecordSet")
RS_picture.open "Select * From [billeder] WHERE billednummer = " & rs_varegrupper("billede") &"", Conn_market, 1, 3
%>
<b><font face="Arial" size="2">
<a href="kategorier.asp?Action=vis_varegruppe&varegruppe_id=<%=rs_varegrupper("varegruppe_id")%>"><img src="img/<%=RS_picture("filnavn")%>" border="0"></a><br>
</b><a href="kategorier.asp?Action=vis_varegruppe&varegruppe_id=<%=rs_varegrupper("varegruppe_id")%>"><br><%=RS_varegrupper("navn")%></a></font>
</center>
<%
Response.write "</td>"
i = i+1
RS_varegrupper.movenext
wend
%>
</table>
</center>

Kan jeg nøjes med en If sætning eller hvad mener du??
Avatar billede zantiago Nybegynder
25. april 2003 - 14:57 #19
Nå ok - Jeg opretter et nyt spørgsmål - Du skal jo have dine points... :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger IT-supporterelever til Lokal IT på Aalborg Kaserne

Capgemini Danmark A/S

AI/Data Engineer

Netcompany A/S

Network Engineer