webForumDet fria alternativet

fler tabeller i SQL

6 svar · 284 visningar · startad av SPiN

SPiNMedlem sedan mars 20007 896 inlägg
#1

Hej!
Kan man ange fler tabeller i ett SQL-uttryck?
Jag håller på med en sökmotor som ska söka poster i en databas. I databasen har jag flera olika tabeller som ska sökas igenom och i varje tabell finns det ett fält med samma namn...
Ex:
tabell nr.1:
| user | pass | favoritferg |
222 | hej | green
231 | tja | green

tabell nr2:
| user | pass | favoritferg |
411 | hej | green
546 | tja | green

sen söker man på ordet green, då vill jag att alla users med den favvofergen ska komma upp :)
lite svårt att förklara...
har provat med:

<% 
set conn = Server.CreateObject("ADODB.Connection") 
path="DBQ=" & server.mappath("databas.mdb") 
conn.open "driver={microsoft access driver (*.mdb)}; " & path,"name","name" 

set rs = conn.Execute("SELECT * FROM tabell1, tabell2, tabell3, tabell4 WHERE favoritferg = '" & sokFarg & " ORDER BY id desc") %>

Men detta funkar inte, felmeddelandet lyder:
Microsoft OLE DB Provider for ODBC Drivers fel '80004005'

[Microsoft][Drivrutin för ODBC Microsoft Access] Det angivna fältet 'favoritferg' kan referera till fler än en av de tabeller som är uppräknade i SQL-uttryckets FROM-instruktion.

minsida.asp, rad 174

rad 174 är raden

set rs = conn.Execute("SELECT * FROM tabell1, tabell2, tabell3, tabell4 WHERE favoritferg = '" & sokFarg & "' ORDER BY id desc")

------------------
SPiN, bjowik99@it-gymnasiet.nu

[Redigerat av SPiN den 22 apr 2000]

[Redigerat av SPiN den 22 apr 2000]

[Redigerat av SPiN den 22 apr 2000]

PatrikBMedlem sedan mars 20002 836 inlägg
#2

Hello,

du kan prova med detta:

set rs = conn.Execute("SELECT * FROM tabell1, tabell2, tabell3, tabell4 WHERE tabell1.favoritferg = '" & sokFarg & "' AND tabell2.favoritferg = '" & sokFarg & "'  ORDER BY id desc")

som du ser så lade jag dit tabellnamnet före fältnamnet.

/PatrikB

PatrikBMedlem sedan mars 20002 836 inlägg
#3

Hello igen,

en fråga bara.

Varför olika tabeller med samma fältnamn och innehåll?

/PatrikB

SPiNMedlem sedan mars 20007 896 inlägg
#4

Jag har gjortt en sida där man kan skicka upp artiklar, så att andra kan läsa. Varje artikel man skickar upp har ett ämne, och jag har gjort så att en artikel med ämnet Sport skickas till tabellen Sport... :)
och nu håller jag på med en sökmotor så att man ska kunna söka artiklar på sidan.
Då är det bra om man kan kolla igenom alla tabeller i databasen, om man t.ex. sökt på en författare eller titel. Författaren kanske gjort artiklar i andra ämnen också.
Så, nu vet du :)

O en grej till...
Hur göra för att sortera i rätt ordning? det går inte med bara ORDER BY id desc... det måste bli typ ORDER BY tabell1.id desc eller nåt, men då hamnar dom inte i rätt ordning...??
------------------
SPiN, bjowik99@it-gymnasiet.nu

[Redigerat av SPiN den 23 apr 2000]

SPiNMedlem sedan mars 20007 896 inlägg
#5

Varför funkar inte sökmotorn för?!
ändrade ORDER BY id desc till ORDER BY tabellnamn.id desc
men det funkar ändå inte...

titel = Request.Querystring("searchTitle")
forfattare = Request.QueryString("searchAuthor")

if titel = "" and forfattare = "" then %>

<html>
<head>
<title>FreeYourHeart</title>
<link rel=stylesheet href="fyh.css" type="text/css">
</head>

<body>

<table border="0" width="100%" height="100%">
<tr>
	<td width="150" align="left" valign="top" style="border-right:1px solid black;"><font class="date"><% =dagensdatum %><br><% =tidpunkt %></font><br> <br>
	<a href="default.asp" class="left">Hem</a><br>
	<a href="read.asp" class="left">Läs Artiklar</a><br>
	&nbsp; &nbsp;<a href="political.asp" class="left">Politiska</a><br>
	&nbsp; &nbsp;<a href="sport.asp" class="left">Sport</a><br>
	&nbsp; &nbsp;<a href="environment.asp" class="left">Miljö</a><br>
	&nbsp; &nbsp;<a href="ovrigt.asp" class="left">Övriga</a><br>
	&nbsp; &nbsp;<a href="search.asp" class="left">Sök</a><br>
	<a href="members.asp" class="left">Medlemmar</a><br>
	<a href="signup.asp" class="left">Sign Up</a><br>
	<a href="info.asp" class="left">Information</a><br>
	<a href="contact.asp" class="left">Ta Kontakt</a><br></td>

	<td width="*" align="left" valign="top"><img src="pics/fyh.gif" border="0"><br> <br>
	<font class="header">:: SökArtikel ::</font><br> <br>
	<form method="GET" action="findarticle.asp">
	<font><b>Titel:<br>
	<input type="text" name="searchTitle" size="25" maxlength="18"><br>
	Författare:<br>
	<input type="text" name="searchAuthor" size="25" maxlength="18"><br> <br>
	<input type="submit" class="buttons" value="Sök"></form></b></font>
</td>
</tr>
</table>
</body>

</html>

<% ElseIf titel = "" then  %>

<%
set conn = Server.CreateObject("ADODB.Connection")
path="DBQ=" & server.mappath("articles.mdb")
conn.open "driver={microsoft access driver (*.mdb)}; " & path,"name","name"

set rs = conn.Execute("SELECT * FROM political, sport, environment, ovrigt WHERE political.author = '" & forfattare & "' AND sport.author = '" & forfattare & "' AND environment.author = '" & forfattare & "' AND ovrigt.author = '" & forfattare & "' ORDER BY ovrigt.id desc") %>

<html>
<head>
<title>FreeYourHeart</title>
<link rel=stylesheet href="fyh.css" type="text/css">
</head>

<body>

<!-- #include file="functions.inc" -->

<table border="0" width="100%" height="100%">
<tr>
	<td width="150" align="left" valign="top" style="border-right:1px solid black;"><font class="date"><% =dagensdatum %><br><% =tidpunkt %></font><br> <br>
	<a href="default.asp" class="left">Hem</a><br>
	<a href="read.asp" class="left">Läs Artiklar</a><br>
	&nbsp; &nbsp;<a href="political.asp" class="left">Politiska</a><br>
	&nbsp; &nbsp;<a href="sport.asp" class="left">Sport</a><br>
	&nbsp; &nbsp;<a href="environment.asp" class="left">Miljö</a><br>
	&nbsp; &nbsp;<a href="ovrigt.asp" class="left">Övriga</a><br>
	&nbsp; &nbsp;<a href="search.asp" class="left">Sök</a><br>
	<a href="members.asp" class="left">Medlemmar</a><br>
	<a href="signup.asp" class="left">Sign Up</a><br>
	<a href="info.asp" class="left">Information</a><br>
	<a href="contact.asp" class="left">Ta Kontakt</a><br></td>

	<td width="*" align="left" valign="top"><img src="pics/fyh.gif" border="0"><br> <br>
	<font class="header">:: HittadeArtiklar ::</font><br> <br>
	<% Do Until rs.EOF %>

	<tr>
		<td width="200" align="left"><a href="<% =FixaTecken(rs("urlen")) %>"><% =FixaTecken(rs("title")) %></a>&nbsp;</td>
		<td width="400" align="left" valign="top"> - <font><% =ConvertLinks(FixaTecken(rs("summary"))) %></font></td>
	</tr>

	<%
	rs.MoveNext
	Loop
	rs.Close

	conn.Close
	%>
	</table>
</td>
</tr>
</table>
</body>

</html>

<% ElseIf forfattare = "" then %>

<%
set conn = Server.CreateObject("ADODB.Connection")
path="DBQ=" & server.mappath("articles.mdb")
conn.open "driver={microsoft access driver (*.mdb)}; " & path,"name","name"

set rs = conn.Execute("SELECT * FROM political, sport, environment, ovrigt WHERE political.title = '" & titel & "' AND sport.title = '" & titel & "' AND environment.title = '" & titel & "' AND ovrigt.title = '" & titel & "' ORDER BY ovrigt.id desc") %>

<html>
<head>
<title>FreeYourHeart</title>
<link rel=stylesheet href="fyh.css" type="text/css">
</head>

<body>

<!-- #include file="functions.inc" -->

<table border="0" width="100%" height="100%">
<tr>
	<td width="150" align="left" valign="top" style="border-right:1px solid black;"><font class="date"><% =dagensdatum %><br><% =tidpunkt %></font><br> <br>
	<a href="default.asp" class="left">Hem</a><br>
	<a href="read.asp" class="left">Läs Artiklar</a><br>
	&nbsp; &nbsp;<a href="political.asp" class="left">Politiska</a><br>
	&nbsp; &nbsp;<a href="sport.asp" class="left">Sport</a><br>
	&nbsp; &nbsp;<a href="environment.asp" class="left">Miljö</a><br>
	&nbsp; &nbsp;<a href="ovrigt.asp" class="left">Övriga</a><br>
	&nbsp; &nbsp;<a href="search.asp" class="left">Sök</a><br>
	<a href="members.asp" class="left">Medlemmar</a><br>
	<a href="signup.asp" class="left">Sign Up</a><br>
	<a href="info.asp" class="left">Information</a><br>
	<a href="contact.asp" class="left">Ta Kontakt</a><br></td>

	<td width="*" align="left" valign="top"><img src="pics/fyh.gif" border="0"><br> <br>
	<font class="header">:: HittadeArtiklar ::</font><br> <br>
	<% Do Until rs.EOF %>

	<tr>
		<td width="200" align="left"><a href="<% =FixaTecken(rs("urlen")) %>"><% =FixaTecken(rs("title")) %></a>&nbsp;</td>
		<td width="400" align="left" valign="top"> - <font><% =ConvertLinks(FixaTecken(rs("summary"))) %></font></td>
	</tr>

	<%
	rs.MoveNext
	Loop
	rs.Close

	conn.Close
	%>
	</table>
</td>
</tr>
</table>
</body>

</html>

<% Else %>

<%
set conn = Server.CreateObject("ADODB.Connection")
path="DBQ=" & server.mappath("articles.mdb")
conn.open "driver={microsoft access driver (*.mdb)}; " & path,"name","name"

set rs = conn.Execute("SELECT * FROM political, sport, environment, ovrigt WHERE political.author = '" & forfattare & "' AND sport.author = '" & forfattare & "' AND environment.author = '" & forfattare & "' AND ovrigt.author = '" & forfattare & "' AND political.title = '" & titel & "' AND sport.title = '" & titel & "' AND environment.title = '" & titel & "' AND ovrigt.title = '" & titel & "' ORDER BY ovrigt.id desc") %>

<html>
<head>
<title>FreeYourHeart</title>
<link rel=stylesheet href="fyh.css" type="text/css">
</head>

<body>

<!-- #include file="functions.inc" -->

<table border="0" width="100%" height="100%">
<tr>
	<td width="150" align="left" valign="top" style="border-right:1px solid black;"><font class="date"><% =dagensdatum %><br><% =tidpunkt %></font><br> <br>
	<a href="default.asp" class="left">Hem</a><br>
	<a href="read.asp" class="left">Läs Artiklar</a><br>
	&nbsp; &nbsp;<a href="political.asp" class="left">Politiska</a><br>
	&nbsp; &nbsp;<a href="sport.asp" class="left">Sport</a><br>
	&nbsp; &nbsp;<a href="environment.asp" class="left">Miljö</a><br>
	&nbsp; &nbsp;<a href="ovrigt.asp" class="left">Övriga</a><br>
	&nbsp; &nbsp;<a href="search.asp" class="left">Sök</a><br>
	<a href="members.asp" class="left">Medlemmar</a><br>
	<a href="signup.asp" class="left">Sign Up</a><br>
	<a href="info.asp" class="left">Information</a><br>
	<a href="contact.asp" class="left">Ta Kontakt</a><br></td>

	<td width="*" align="left" valign="top"><img src="pics/fyh.gif" border="0"><br> <br>
	<font class="header">:: HittadeArtiklar ::</font><br> <br>
	<% Do Until rs.EOF %>

	<tr>
		<td width="200" align="left"><a href="<% =FixaTecken(rs("urlen")) %>"><% =FixaTecken(rs("title")) %></a>&nbsp;</td>
		<td width="400" align="left" valign="top"> - <font><% =ConvertLinks(FixaTecken(rs("summary"))) %></font></td>
	</tr>

	<%
	rs.MoveNext
	Loop
	rs.Close

	conn.Close
	%>
	</table>
</td>
</tr>
</table>
</body>

</html>

<% End If %>

I databasen finns det fyra tabeller, sport, political, environment & ovrigt. I dessa tabeller finns det fem olika fält, det är id, urlen, title summary & author...
i tabellen ovrigt finns det i fältet title ordet Testar, och i fältet author ordet SPiN.
Men när man sen söker på dom orden kommer ingenting upp!! Jobbigt...

------------------
SPiN, bjowik99@it-gymnasiet.nu

PatrikBMedlem sedan mars 20002 836 inlägg
#6

Hello igen,

vet inte detta, men, jag tycker nog att det låter lite knöligt med så många tabeller.

Själv skulle jag nog göra databasen på detta vis:

Tabell 1: Artiklar

Fältnamn:

ArtikelID [räknare] Primärnyckel
ArtikelURL [text(70)]
Rubrik [text(50)]
Summary [PM]
Author [text(70)]
Date [Datum/Tid]
KatID [Tal]

Tabell 2: Kategorier

Fältnamn:
KategoriID [räknare] - Primärnyckel
Sport [text(5)]
Environment [text(11)]
Political [text(9)]
Ovrigt [text(6)]

Låter ArtikelID och KategoriID vara Primärnycklar.
Gör en 1 till "många" relation mellan Kategorier.KategoriID och Artiklar.KatID

På detta sätt mår servern bättre, då det går åt mer resureser att kolla i flera tabeller och du kommer att få snabbare sökningar.

Man kanske skulle kunna fixa en tabell till som innehåller alla författare och sedan använder man sig av deras FörfattarID i Artikel tabellen.

Vet att detta inte va ämnet då du frågade om hur du skulle göra för att lösa sorteringen efter KategoriID.

Men denna databas blir lättare att göra SQLsatser och sortering i

mvh
PatrikB

[Redigerat av PatrikB den 23 apr 2000]

SPiNMedlem sedan mars 20007 896 inlägg
#7

Japp jag får nog ta och göra så... blir lite extra jobb, men men
det andra funkade juh inte :)

gjorde så här, att jag skapade bara en tabell. I den innehöll allting inkl. vilket ämne det var. Sen på varje ämnes sida sökte jag i tabellen med SQL-uttrycket(?) WHERE amne = '" & subject & "'
funkar fint :)
dock inte på internet... bara på PWS...
att det ska skilja så mycket (eller så kan jag inte progga helt rätt)... ofta det bara funkar på den ena... :l

tack skaru ha för ditt tålamod och alla dina svar :)

------------------
SPiN, bjowik99@it-gymnasiet.nu

[Redigerat av SPiN den 24 apr 2000]

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