Suchen...

13/02/2010 - 16:21 von Stefan Reinmers | Report spam
Hi, ich habe (für ein Intranet) diverse Tabellen in einer Datenbank (SQL
Server 2008) die ich gerne Google like durchsuchen möchte.
Also ich gebe in einem Textfeld einen Suchbegriff ein und er soll in
folgenden Tabellen suchen , Benutzer,Forum, Wissen, Fotoalbum, Aktivitàten
u.a.
Wie bereite ich jetzt aber die Suchergebnisse so auf, das wenn er z.B. was
im Forum gefunden hat ich den direkten Link zurückgebe, mit dem der Beitrag
vom Forum geöffnet wird.
z.B. forum.asp?TopicG11
oder um einen Benutzer anzuzeigen Benutzerview.asp?ID=4

oder habe ich jetzt eine falsche denke?

Sollte man die ganze Sache anders angehen?

Gruss
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
13/02/2010 - 16:48 | Warnen spam
Hallo Stefan,

"Stefan Reinmers" schrieb:

Hi, ich habe (für ein Intranet) diverse Tabellen in einer Datenbank (SQL Server 2008) die ich gerne Google like durchsuchen
möchte.
Also ich gebe in einem Textfeld einen Suchbegriff ein und er soll in folgenden Tabellen suchen , Benutzer,Forum, Wissen,
Fotoalbum, Aktivitàten u.a.



Entweder manuell machen (ganz normal per SQL Statement und die Ergebnisse
dann zusammenführen) oder bspw. über einen Volltextkatalog.

Wie bereite ich jetzt aber die Suchergebnisse so auf, das wenn er z.B. was im Forum gefunden hat ich den direkten Link zurückgebe,
mit dem der Beitrag vom Forum geöffnet wird.
z.B. forum.asp?TopicG11
oder um einen Benutzer anzuzeigen Benutzerview.asp?ID=4



Das kommt auf deine Anforderungen an. Bspw. kannst Du eine UNION Abfrage machen,
in der die benötigten Daten stehen.

SELECT 1 AS Typ, TopicId AS RecordId, Titel AS Ausgabe FROM Forum WHERE ...
UNION ALL
SELECT 2 AS Typ, UserId AS RecordId, Name AS Ausgabe FROM Benutzer WHERE ...
UNION ALL
SELECT 3 AS Typ, WissenNr AS RecordId, Irgendwas AS Ausgabe FROM Wissen WHERE ...

In der Ausgabe kannst Du dann auf die Spalte Typ abfragen und entscheiden, wie
der Link auszusehen hat.



<asp:HyperLink ...
NavigateUrl="<%# BuildLink( Container.DataItem.Typ, Container.DataItem.RecordId %>"
Text="<%# Container.DataItem.Ausgabe %>" />



Public Function BuildLink( ByVal Typ As Int64, ByVal RecordId As Int64 ) As String

Dim NavigateUrl As String = String.Empty

Select Case Typ
' Forum
Case 1: NavigateUrl = "~/forum.asp?Topic={0}"
' Benutzer
Case 2: NavigateUrl = "~/Benutzerview.aspx?ID={0}"
' Wissen
Case 3: NavigateUrl = "~/Wissen.aspx?Irgendwas={0}"
End Select

If Not String.IsNullOrEmpty( NavigateUrl ) Then
Return String.Format( NavigateUrl, RecordId.ToString() )
Else
Return "~/NixGefunden.aspx"
End if

End Function



Ob das jetzt so zielführend ist, hàngt von vielen Faktoren ab.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen