检查结果是否来自SQL中的特定表

时间:2015-02-19 09:53:16

标签: c# mysql asp.net

我的网站上有搜索功能。它在我的数据库中搜索电影,歌曲或书籍,所有这3个都在不同的表格中。 现在说我希望每个表的SearchResult.aspx不同。例如,电影显示在列表中,歌曲显示在网格视图中,书籍显示在标签中。

要做到这一点,我必须知道当我使用C#设置upp页面时结果来自哪个表。可以这样做吗?

编辑:搜索是用户输入的字符串。一个普通的search-texbox就像stackoverflow上的那个:

<asp:TextBox ID="TextBoxSearch" CssClass="form-control" placeholder="Search" runat="server"></asp:TextBox>

我在想什么:

if(search is from tableMovies){
DisplayMovieList();
}
else if(search is from tableSongs){
DisplaySongs();
}
else{
DisplayBook();
}

也许有一种不同的方式可以做到这一点,我没有想到,它一定是可能的吗?因为例如imdb允许您使用相同的搜索框和相同的searchResult页面搜索actor和movie。

我发送搜索值的代码:

Response.Redirect("SearchResult.aspx?Result=" + TextBoxSearch.Text);
编辑:在Tim Schmelters的帮助下,工作解决方案回答:

SQL:

SELECT Table1.Col1, 'Table1' As Type FROM Table1 WHERE (Table1.ColId=@param)
UNION ALL
SELECT Table2.Col2, 'Table2' As Type FROM Table2 WHERE (Table2.ColId=@param);

C#:

using (SqlDataReader reader = cmd.ExecuteReader())
{
   if (reader.Read())
   {
      Label1.Text = reader.GetString(reader.GetOrdinal("Type"));
   }
}

以上给出了类型。现在我可以使用该类型来构造一些if语句,我隐藏/显示servercontrols取决于结果来自哪个表,感谢指向我正确的方向Tim:)

2 个答案:

答案 0 :(得分:3)

它有点抽象,因为你还没有显示你的查询,但我想你可以这样做:

SELECT * FROM
(
    SELECT Col1, Col2, 'Movie' As Type
    FROM dbo.Movie
    WHERE ....

    UNION ALL

    SELECT Col1, Col2, 'Book' As Type
    FROM dbo.Book
    WHERE ....

    UNION ALL

    SELECT Col1, Col2, 'Song' As Type
    FROM dbo.Song
    WHERE ....
) x
ORDER BY Col1, Col2, Type

现在您拥有Type,可以使用ifswitch

答案 1 :(得分:0)

我接近这个的方法是在所有表中查找searchstring,并在页面上为按找到的条目数排序的每个结果提供一个部分。我认为这是从我的经验中做到这一点的常用方法。

我知道这是一个模糊的答案,但这也是一个含糊的问题。