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
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
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.
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=
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.
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
%>
<%
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()
%>