webForumDet fria alternativet

Sql-sats i menysystem

17 svar · 443 visningar · startad av timedia

timediaMedlem sedan maj 2001420 inlägg
#1

Försöker fixa en liten webshop och hittade Macce´s dynamiska menyscript här på webforum. Så här ser länkerna ut i dag:

<a href='"&scriptname&"?lnkid="&arrLinks(0,X) &"&parid="&Sublink&"' class='"&strClass&"'>

,men jag önskar plocka ut produkterna från en annan tabell där produkterna ligger i kategorierna Varugrp, Varugrp2, Namn1, Namn2 och i vissa fall även en underkategori kallad Namn3.

jag behöver alltså en sats som säger

SELECT * FROM varor WHERE  Varugrp, Varugrp2, Namn1, Namn2, Namn3 = det som står i menyn

Någon som förstår och kan hjälpa?

timediaMedlem sedan maj 2001420 inlägg
#2

Ingen som vet?
...inte Macce häller?

timediaMedlem sedan maj 2001420 inlägg
#3

Försöker en gång till och provar vara mer precis. I dag har jag följande länk:

Response.Write("<a href='"&scriptname&"?lnkid="&arrLinks(0,X) &"&parid="&Sublink&"' class='"&strClass&"'>"&VbCrlf)
Response.Write(strBullet & arrLinks(2,X)& "</a></TD></TR>"&VbCrlf)

Jag vill alltså ändra denna så den hämtar produkter som ligger i tabellen Varor med bl.a. dessa kolumner: Varugrp, Varugrp2, Namn1, Namn2 och ibland även Namn3:

HJÄLP?

solbulleMedlem sedan mars 20015 287 inlägg
#4

Jag kan inte riktigt se att du är så där jätteprecis.
Du visar en länk.
Men du söker en sql-fråga(!?!)

Hur ser din sqlfråga ut idag som matchar den länken?

timediaMedlem sedan maj 2001420 inlägg
#5

ooops, så ser frågan ut:

SELECT page_id,parent_page_id,linktext FROM tbl_links ORDER BY orderid

saxat från macce´s script som ligger här: http://www.webforum.nu/showthread.php?s=&threadid=76224&forumid=148

MacceMedlem sedan apr. 2001425 inlägg
#6

slå ihop tabellerna i frågan, eller ?

SELECT tbl_links.page_id,tbl_links.parent_page_id, tbl_links.linktext, tbl_varugrp.Varugrp, tbl_varugrp.Varugrp2, tbl_varugrp.Namn1, tbl_varugrp.Namn2, tbl_varugrp.Namn3 FROM tbl_links, tbl_varugrp WHERE tbl_varugrp.page_id = tbl_links.page_id ORDER BY orderid

Vet inte om jag förstått frågan rätt ?

timediaMedlem sedan maj 2001420 inlägg
#7

Tack Macce. Ska försöka!

Select-satsen ska väl in i 'arrLinks'.
Sen behöver jag väl ändra länken i Sub LinkTree också. Hur ska den formas? Detta var svårt för mig, men jag gillar verkligen scriptet :(

timediaMedlem sedan maj 2001420 inlägg
#8

Vet att jag är tjatig, men kan du hjälpa mig mer?
Är jag kanske på fel spår..?
Bifogar db och hoppas (bönar och ber) att du kan ta dig tid?

MacceMedlem sedan apr. 2001425 inlägg
#9

du måste ha ett motsvarande page_id-fält i tabellen varor så man kan skapa relationen mellan dessa två tabeller...

timediaMedlem sedan maj 2001420 inlägg
#10

Det har jag fixat, se bifogad db.
Hur gör jag nu?

MacceMedlem sedan apr. 2001425 inlägg
#11

hmm, blir inte riktigt klok på hur du menar...

Ta bort relationen i din db, den behövs inte där...

men vad vill du ska visas i din meny ? ska namn1 och 2 osv komma fram i menyn ?

Tror jag missförstått dig lite...

Prova följande mot din db, och gå till ex. torkpapper:

<%Dim intParentId,strParentId,arrLinks,intGrpId,Sublink,strClass,strBullet,qstLnkId,qstParentId,strPid

qstLnkId		=		Request.Querystring("lnkid")
qstParentId		=		Request.Querystring("parid")
scriptname		=		Request.ServerVariables("SCRIPT_NAME")
arrLinks		=		GetRows("SELECT page_id,parent_page_id,linktext FROM tbl_links ORDER BY orderid ")
intGrpId		=		1 'de länkar som ska vara på nivå ett är barn till grupp 1 (alltså parent_page_id i databasen är =1)

If Len(qstParentId)<1 AND IsArray(arrLinks) THEN ' om man inte har querystring så öppnas den första länken automatiskt
	For I = 0 To Ubound(arrLinks,2)
		qstLnkId =  arrLinks(0,I)
		qstParentId =arrLinks(0,I)
		IF intGrpId = arrLinks(1,I) THEN Exit For
	Next
END IF	

Response.Write "<HTML><HEAD><STYLE TYPE=""text/css"">"&VbCrlf
Response.Write ".catlink      {color: #3A3A3A; font-family: verdana,arial; font-size: 10px; text-decoration: none;}"&VbCrlf
Response.Write ".sublink      {color: #3A3A3A; font-family: verdana,arial; font-size: 10px; text-decoration: none;}"&VbCrlf
Response.Write ".catlinkactive{color: #000000; font-family: verdana,arial; font-size: 10px; text-decoration: none; Font-weight:bold;}"&VbCrlf
Response.Write ".sublinkactive{color: #000000; font-family: verdana,arial; font-size: 10px; text-decoration: none; Font-weight:bold;}"&VbCrlf
Response.Write "</STYLE></HEAD><BODY>" & VbCrlf

If IsArray(arrLinks) Then
  Response.Write "<br><br><TABLE border='0' cellspacing='0' cellpadding='1' width='50%' align='center'>"&VbCrlf		
	Call LinkTree(intGrpId,0)
  Response.Write "</TABLE>"
ELSE
	 Response.Write "Finns inga länkar"&VbCrlf	
END IF

arrArtiklar = GetRows("SELECT * FROM varor Where page_id="&qstLnkId)

If IsArray(arrArtiklar) THEN
	Response.Write("<br><br><TABLE border=1>")
	For u = 0 To Ubound(arrArtiklar,2)
	Response.Write("<TR>")
		For m = 0 To Ubound(arrArtiklar,1)	
		Response.Write("<TD>"&arrArtiklar(m,u)&"</TD>")
		Next
	Response.Write("</TR>")		
	Next
	Response.Write("</TABLE>")
END IF

Response.Write "</BODY></HTML>"

Sub LinkTree(intParent,intIndent) :	Dim X,Z
		For X = 0 To Ubound(arrLinks,2)		
			If arrLinks(1,X) = intParent AND (Cstr(arrLinks(1,X))=Cstr(intGrpId) OR instr(","&qstParentId&",",","&intParent&",")>0) Then
			strPid=""
				Response.Write VbCrlf & "<TR><TD bgcolor='#ffffff'>"	
				For Z = 1 To intIndent									  
				  Response.Write("<img src='1px.gif' width='6' height='8' align='left'>")				 
				Next			
				IF intIndent=0 then 
				 Sublink=arrLinks(0,X)	
					 IF cstr(qstLnkId)  =  cstr(arrLinks(0,X)) THEN 
					 strClass  =  "catlinkactive"
					 strBullet =  "<img src='icon-active-dot.gif' border=0 align='left'>"
					 ELSE 
					 strClass  =  "catlink"
					 strBullet =  "<img src='icon-inactive-dot.gif' border=0 align='left'>"
					 END IF
				ELSE							
				For Z = 1 To intIndent : strPid=strPid&split(qstParentId,",")(Z-1) & "," : next
				 Sublink=strPid & arrLinks(0,X)
					 IF cstr(qstLnkId)  =  cstr(arrLinks(0,X)) THEN 
					 strClass  =  "sublinkactive"
					 strBullet =  "<b>- </b>"'kan även vara bild som ovan
					 ELSE 
					 strClass  =  "sublink"
					 strBullet =  "- "
					 END IF
				END IF				
				Response.Write("<a href='"&scriptname&"?lnkid="&arrLinks(0,X) &"&parid="&Sublink&"' class='"&strClass&"'>"&VbCrlf)	
				Response.Write(strBullet & arrLinks(2,X)& "</a></TD></TR>"&VbCrlf)
				Call LinkTree(arrLinks(0,X),intIndent + 1)			
			End If
		Next 
End Sub

Function GetRows(ByVal SQL)
		Dim arrRecords, rs	
		Set Connection = Server.CreateObject("ADODB.Connection")
		Connection.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("\linktree\mindb.mdb"))		
		Set rs = Connection.Execute(SQL)
		If Not rs.BOF Or Not rs.EOF Then
			arrRecords = rs.GetRows()
		ELSE
			arrRecords = ""
		End If		
		rs.Close
		Set rs = nothing
		Connection.Close
		Set Connection = nothing
		GetRows = arrRecords 
End Function

%>
timediaMedlem sedan maj 2001420 inlägg
#12

Nu börjar det likna nåt. Namn1, namn2 o.s.v. kan jag nog plocka bort nu när jag börjar fatta hur det går till. Behöver dock göra lite ändringar då sajten är gjord med ramar - där menyn ska ligga i en och resultatet(varorna) i en annan. Blir det problematisk?

MacceMedlem sedan apr. 2001425 inlägg
#13

nej då inga problem, det löser du med ett javascript som laddar båda ramarna då du klicka på en länk...

MacceMedlem sedan apr. 2001425 inlägg
#14

funktion i menyframen:

	Response.Write  "<script Language=""JavaScript"">" & Vbcrlf
	Response.Write  "function load2(URL1,URL2)" & Vbcrlf
	Response.Write  "{" & Vbcrlf
	Response.Write  "	location.href=URL1;" & Vbcrlf
	Response.Write  "	parent.frames.main.location.href=URL2;" & Vbcrlf
	Response.Write  "}" & Vbcrlf
	Response.Write  "</script>" & Vbcrlf

och i din sub:

"<A HREF=""javascript:load2('"&scriptname&"?lnkid="&arrLinks(0,X) &"&parid="&Sublink&"', 'visaartiklar.asp?lnkid="&arrLinks(0,X)&"')"" class='"&strClass&"'>" & arrLinks(2,X)& "</a>"

ej testat men typ så...

timediaMedlem sedan maj 2001420 inlägg
#15

Skippade frames ändå :)

Nu blev det riktigt bra tycker jag! Tack Macce!

Funderar dock lite på tabellerna som presenterar produkterna. beroende på vilka produktgrupper som efterfrågas, visar den tomma kolumner: Finns det nåt sätt att bara skriva ut kolumner som har innehåll? -och hur fixar jag så den skriver ut rubrikerna på första rad?

<%Dim  intParentId,strParentId,arrLinks,intGrpId,Sublink,strClass,strBullet,qstLnkId,qstParentId,strPid

qstLnkId		=		Request.Querystring("lnkid")
qstParentId		=		Request.Querystring("parid")
scriptname		=		Request.ServerVariables("SCRIPT_NAME")
arrLinks		=		GetRows("SELECT page_id,parent_page_id,linktext FROM tbl_links ORDER BY orderid ")
intGrpId		=		1 'de länkar som ska vara på nivå ett är barn till grupp 1 (alltså parent_page_id i databasen är =1)

	

If Len(qstParentId)<1 AND IsArray(arrLinks) THEN ' om man inte har querystring så öppnas den första länken automatiskt
	For I = 0 To Ubound(arrLinks,2)
		qstLnkId =  arrLinks(0,I)
		qstParentId =arrLinks(0,I)
		IF intGrpId = arrLinks(1,I) THEN Exit For
	Next
END IF	

Response.Write "<HTML><HEAD><STYLE TYPE=""text/css"">"&VbCrlf
Response.Write ".catlink      {color: #3A3A3A; font-family: verdana,arial; font-size: 10px; text-decoration: none;}"&VbCrlf
Response.Write ".sublink      {color: #3A3A3A; font-family: verdana,arial; font-size: 10px; text-decoration: none;}"&VbCrlf
Response.Write ".catlinkactive{color: #000000; font-family: verdana,arial; font-size: 10px; text-decoration: none; Font-weight:bold;}"&VbCrlf
Response.Write ".sublinkactive{color: #000000; font-family: verdana,arial; font-size: 10px; text-decoration: none; Font-weight:bold;}"&VbCrlf
Response.Write "</STYLE></HEAD><BODY>" & VbCrlf

Response.Write "<table border='0' width='100%'><tr><td width='29%' valign='top' align='left'>"

If IsArray(arrLinks) Then
  Response.Write "<br><br><TABLE border='0' cellspacing='0' cellpadding='1' width='100%' align='center'>"&VbCrlf		
	Call LinkTree(intGrpId,0)
  Response.Write "</TABLE>"
ELSE
	 Response.Write "Finns inga länkar"&VbCrlf	
END IF

arrArtiklar = GetRows("SELECT Artnr, Namn5, Storlek, Storlektyp, Farg, Ant_forp FROM varor Where page_id="&qstLnkId)
Response.Write "</td>"

Response.Write "<td width='71%' valign='top' align='left'>"
If IsArray(arrArtiklar) THEN

Response.Write("<br><TABLE border=1><tr><td>Art.nr</td><td>Namn</td><td>Storlek</td><td>S-typ</td><td>Färg</td><td>Antal/förpackn;</td></tr>")
For u = 0 To Ubound(arrArtiklar,2)
Response.Write("<TR>")
	For m = 0 To Ubound(arrArtiklar,1)	
	Response.Write("<TD bgcolor='#C0C0C0'>"&arrArtiklar(m,u)&"</TD>")
	Next
Response.Write("</TR>")		
	Next
	Response.Write("</TABLE>")
END IF

Response.Write "</td></tr></table></BODY></HTML>"

Sub LinkTree(intParent,intIndent) :	Dim X,Z
		For X = 0 To Ubound(arrLinks,2)		
			If arrLinks(1,X) = intParent AND (Cstr(arrLinks(1,X))=Cstr(intGrpId) OR instr(","&qstParentId&",",","&intParent&",")>0) Then
			strPid=""
				Response.Write VbCrlf & "<TR><TD bgcolor='#ffffff'>"	
				For Z = 1 To intIndent									  
				  Response.Write("<img src='1px.gif' width='6' height='8' align='left'>")				 
				Next			
				IF intIndent=0 then 
				 Sublink=arrLinks(0,X)	
					 IF cstr(qstLnkId)  =  cstr(arrLinks(0,X)) THEN 
					 strClass  =  "catlinkactive"
					 strBullet =  "<img src='icon-active-dot.gif' border=0 align='left'>"
					 ELSE 
					 strClass  =  "catlink"
					 strBullet =  "<img src='icon-inactive-dot.gif' border=0 align='left'>"
					 END IF
				ELSE							
				For Z = 1 To intIndent : strPid=strPid&split(qstParentId,",")(Z-1) & "," : next
				 Sublink=strPid & arrLinks(0,X)
					 IF cstr(qstLnkId)  =  cstr(arrLinks(0,X)) THEN 
					 strClass  =  "sublinkactive"
					 strBullet =  "<b>- </b>"'kan även vara bild som ovan
					 ELSE 
					 strClass  =  "sublink"
					 strBullet =  "- "
					 END IF
				END IF				
				Response.Write("<a href='"&scriptname&"?lnkid="&arrLinks(0,X) &"&parid="&Sublink&"' class='"&strClass&"'>"&VbCrlf)	
				Response.Write(strBullet & arrLinks(2,X)& "</a></TD></TR>"&VbCrlf)
				
				'Response.Write "<A HREF=""java script:load2('"&scriptname&"?lnkid="&arrLinks(0,X) &"&parid="&Sublink&"', 'prod.asp?lnkid="&arrLinks(0,X)&"')"" class='"&strClass&"'>" & arrLinks(2,X)& "</a>"
				
				Call LinkTree(arrLinks(0,X),intIndent + 1)			
			End If
		Next 
End Sub

Function GetRows(ByVal SQL)
		Dim arrRecords, rs	
		Set Connection = Server.CreateObject("ADODB.Connection")
		Connection.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("..\sys\dbgam.mdb"))		
		Set rs = Connection.Execute(SQL)
		If Not rs.BOF Or Not rs.EOF Then
			arrRecords = rs.GetRows()
		ELSE
			arrRecords = ""
		End If		
		rs.Close
		Set rs = nothing
		Connection.Close
		Set Connection = nothing
		GetRows = arrRecords 
End Function

%>
MacceMedlem sedan apr. 2001425 inlägg
#16

Jag vet inte om jag uppfattat frågan helt rätt ?

Men enklast är nog att skriva ut alla kolumner och köra ett villkor i dem.

Typ:
IF len( "data variabel" )>0 Then
'skriv ut: "data variabel"
ELSE
'Skriv "& nbsp;"
END IF

timediaMedlem sedan maj 2001420 inlägg
#17

Öhhh...
Jag menar att om jag bara listar t.ex. Torkpapper så finns det ingen färg inlagd i db. Då vill jag hälst inte visa den kolumnen, men hur gör jag detta?

timediaMedlem sedan maj 2001420 inlägg
#18

Får det inte att fungera? :(

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)