Jag gör en söksida där jag vill att sökningen ska gå igenom flera databaser
Hur gör jag för att jag ska kunna läsa in flera tabeller? exempelvis:
ID, Namn, bild från tabell 1, tabell 2, tabell 3
21 svar · 316 visningar · startad av H_E_Pennypacker
Jag gör en söksida där jag vill att sökningen ska gå igenom flera databaser
Hur gör jag för att jag ska kunna läsa in flera tabeller? exempelvis:
ID, Namn, bild från tabell 1, tabell 2, tabell 3
hello, und willkommen auf wF (kan inte tyska, men det får duga ;) )
databasmotor? access? sql server?
hur ser relationerna ut?
menar du flera databaser som du skrev först, eller flera tabeller som du skrev sen?
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>
Ja du, det kanske är svårt att lösa när man inte får tillräcklig information, jag är nybörjare inom området, men då ska vi se:
Det är 1 databas men i den flera tabeller. Databasen är gjord i Access. Jag jobbar i Dreamweaver Ultradev 4, och när jag skriver följande
SELECT * FROM tabell1, tabell2
Så får jag fram 10 st av varje rad i tabell1 men ingen från tabell2.
Tabellerna ser också något olika ut, har lite olika fält.
Ex. Tabell1 Tabell2
-------- --------
ID ID
Namn Namn
Bild Bild
Smak Färg
Vet inte om detta var till någon mer hjälp?
Det vart lite kluddigt men
Tabell1 innehåller fälten
ID, Namn, Bild, Smak
Medans Tabell2 innehåller fälten
ID, Namn, Bild, Färg
ok, det handlar alltså inte om en join, du har inga relationer mellan tabellerna, utan du vill bara få ut allt från tabell1 och allt från tabell2?
prova en liten union, kanske?
select * from Tabell1
union
select * from Tabell2
nånting sånt borde funka...
mvh,
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>
Provade med koden:
select * from ol
union
select * from snaps
Men fick felmeddelandet:
[Microsoft][Drivrutin för ODBC Microsoft Access] Antalet kolumner i tabellerna eller frågorna i unionsfrågan stämmer inte överens.
Jo, så är det här i livet. När man använder union så måste vara lika många kolumner i select-listorna och så måste typerna vara samma (eller åtminstone jämförbara).
Du kan ju lägga till några dummyvärden i den ena select-listan så att det stämmer.
------------------
essentitia preter non sans multiplicandum
du menar i databasen eller i sql strängen, om senare isåfall hur?
Jag menar i sql-strängen.
Antag att t1 har kolumnerna
c1 int
c2 char
c3 int
c4 char
och att t2 har kolumnerna
c1 int
c2 char
då kan man skriva en union så här
select c1,c2,c3,c4 from t1
union
select c1,c2,0,'' from t2
------------------
essentitia preter non sans multiplicandum
som sagt jag är inget vidare vettigt bra på detta (men det är väl bla därför såna här forum finns)
Behöver egentligen inte ta ut all information ur tabellerna (*), det räcker med ett antal rader som jag vet finns i båda tabellerna, men med denna kod:
select ID, Namn, Bild, Betyg, Producent from ol
union
select ID, Namn, Bild, Betyg, Producent from snaps
Får jag felmeddelandet:
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
Hur ser jag om kolumnerna är INT eller CHAR?
hej!
det känns som att 'namn' är ett reserverat ord, som skapar felmeddelandet du får.
du måste nog faktiskt klamra dina kolumner om du ska använda reserverade ord som fältnamn.
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>
klamra - specificera fältnamnen inom hakparenteser.
select [namn], [select] from tblBah
typ.
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>
tack
Men upptäckte var felet låg. Lite pinsamt men jag hade döpt om ett av fältnamnen när jag testade. Ändrade tillbaka och allt fungerade.
Då kommer tyvärr nästa problem
Alla sökresultat som kommer ifrån tabellen snaps ska länkas till /snaps.asp?ID=
medan allt från tabellen ol ska länkas till /ol.asp?ID=
Svårlöst? eller ska jag bara lägga ner?
lägga ner?
inte då! ;)
men då måste vi ju veta varifrån värdena kommer.
select kol1, kol2, kol3, 'snaps' as typ from snaps
select kol1, kol2, kol3, 'ol' as typ from ol
borde göra tricket. nu har du ett fält i ditt resultset som heter typ, som innehåller antingen 'snaps' eller 'ol'.
när du drar ut din loop så länkar du bara till <%=objRS("typ")%>.asp?id=<%=objRS("ID")%>
mvh,
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>
det börjar ta sig, men lite nya problem, säkert enkla att lösa, den ska ju sortera ut efter sökningen
Jag kodade följande
SELECT ID, Namn, Betyg, Bild, Producent, 'snaps' as typ from snaps union select ID, Namn, Betyg, Bildliten, Producent, 'ol' as typ
FROM ol
WHERE Namn like Request.Form('"sok"')
ORDER BY Namn
Fungerade inte riktigt:
Odefinerad funktion "Request.Form" i uttryck.
Nåt förslag?
använder du asp för detta?
kan man få se på den asp-kod som skapar frågan ovan, så ska vi kunna hjälpa dig.
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>
kör ultradev 4
men koden ser ut som följer (hoppas det var den här du ville ha)
<%
set ta_ut_allt = Server.CreateObject("ADODB.Recordset")
ta_ut_allt.ActiveConnection = MM_Barbarnes_test_STRING
ta_ut_allt.Source = "SELECT ID, Namn, Betyg, Bild, Producent, 'snaps' as typ from snaps union select ID, Namn, Betyg, Bildliten, Producent, 'ol' as typ FROM ol WHERE Namn like Request.Form('"sok"') ORDER BY Namn"
ta_ut_allt.CursorType = 0
ta_ut_allt.CursorLocation = 2
ta_ut_allt.LockType = 3
ta_ut_allt.Open()
ta_ut_allt_numRows = 0
%>
<%
' *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters
' create the list of parameters which should not be maintained
MM_removeList = "&index="
If (MM_paramName <> "") Then MM_removeList = MM_removeList & "&" & MM_paramName & "="
MM_keepURL="":MM_keepForm="":MM_keepBoth="":MM_keepNone=""
' add the Form variables to the MM_keepForm string
For Each Item In Request.Form
NextItem = "&" & Item & "="
If (InStr(1,MM_removeList,NextItem,1) = 0) Then
MM_keepForm = MM_keepForm & NextItem & Server.URLencode(Request.Form(Item))
End If
Next
' create the Form + URL string and remove the intial '&' from each of the strings
MM_keepBoth = MM_keepURL & MM_keepForm
if (MM_keepBoth <> "") Then MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) - 1)
if (MM_keepURL <> "") Then MM_keepURL = Right(MM_keepURL, Len(MM_keepURL) - 1)
if (MM_keepForm <> "") Then MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) - 1)
' a utility function used for adding additional parameters to these strings
Function MM_joinChar(firstItem)
If (firstItem <> "") Then
MM_joinChar = "&"
Else
MM_joinChar = ""
End If
End Function
%>
jepps.
det är i första stycket du ska ändra lite.
<%
set ta_ut_allt = Server.CreateObject("ADODB.Recordset")
ta_ut_allt.ActiveConnection = MM_Barbarnes_test_STRING
ta_ut_allt.Source = "SELECT ID, Namn, Betyg, Bild, Producent, 'snaps' as typ from snaps WHERE Namn like '%" & Request.Form("sok") & "%' union select ID, Namn, Betyg, Bildliten, Producent, 'ol' as typ FROM ol WHERE Namn like '%" & Request.Form("sok") & "%' ORDER BY Namn"
ta_ut_allt.CursorType = 0
ta_ut_allt.CursorLocation = 2
ta_ut_allt.LockType = 3
ta_ut_allt.Open()
ta_ut_allt_numRows = 0
%>
hur gick det där?
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
all your base are belong to us!</A>
Nja, nu verkar den bara ta ut information ur tabellen snaps, alla rader oavsett vad man söker på.
Så här ser hela seachresult.asp ut:
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/Barbarnes_test.asp" -->
<%
set ta_ut_allt = Server.CreateObject("ADODB.Recordset")
ta_ut_allt.ActiveConnection = MM_Barbarnes_test_STRING
ta_ut_allt.Source = "SELECT ID, Namn, Betyg, Bild, Producent, 'snaps' as typ from snaps union select ID, Namn, Betyg, Bildliten, Producent, 'ol' as typ FROM ol WHERE Namn like '%" & Request.Form("sok") & "%' ORDER BY Namn ASC"
ta_ut_allt.CursorType = 0
ta_ut_allt.CursorLocation = 2
ta_ut_allt.LockType = 3
ta_ut_allt.Open()
ta_ut_allt_numRows = 0
%>
<HTML>
<HEAD>
<TITLE> Sökresultat - från Bar Barnes</TITLE>
</HEAD>
<body>
<p>
<% If ta_ut_allt.EOF then %>
Tyvärr så kunde inte din sökning matchas med vår databas,
prova igen!
<% Else %>
Din sökning gav följande träffar:</p>
<p> </p>
<p>
<% Do Until ta_ut_allt.EOF %>
<%=UCASE(ta_ut_allt.Fields.Item("Namn").Value)%></p>
<p>
<%
ta_ut_allt.MoveNext
Loop
%>
</p>
<%
End If
%>
</HTML>
<%
ta_ut_allt.Close()
%>
Och formuläret på söksidan ser ut så här:
<form name="form1" method="post" action="searchresult.asp">
<p align="center">
<input type="text" name="sok" size="20">
<input type="image" src="images/bb_sok.gif" width="56" height="32" border="0" name="image">
</p>
</form>
Några förslag?