比较后显示同一表和列中的不同值

时间:2015-04-27 05:47:28

标签: sql visual-studio-2013 labels local-database

public partial class UserProfile : System.Web.UI.Page
{
    private static int _userId = 0 ;
    protected void Page_Load(object sender, EventArgs e)
    {
        string FoB;

        if (Session["user"] != null)
        {
            _userId = DataManager.GetUserId(Session["user"].ToString());
        }
        string connection = WebConfigurationManager.ConnectionStrings["Database"].ConnectionString;
        SqlConnection conn = new SqlConnection(connection);
        SqlCommand comm = new SqlCommand("SELECT * from dbo.Rating where UserID=_userId", conn);
        SqlDataReader reader;
        conn.Open();
        reader = comm.ExecuteReader();
        reader.Read();
            FoB = reader["GenreID"].ToString();
        if(FoB=="1" )
        {
            FB.Text = reader["RatingValue"].ToString();
        };

            }
            while (reader.HasRows);

            reader.Close();
            conn.Close();
    }
}

我有一个名为rating的表。它有4列

RatingId, UserID, GenreID,Rating value

我希望根据登录的当前用户和不同类型的不同评级值在标签上显示评级值。 UserIDGenreID是表GenreUser中的外键。

修改(评论)

CREATE TABLE [dbo].[Rating] ( 
  [RatingID] INT IDENTITY (1, 1) NOT NULL, 
  [UserID] INT NULL, [GenreID] INT NOT NULL, 
  [RatingValue] INT NOT NULL, 
  PRIMARY KEY CLUSTERED ([RatingID] ASC), 
  CONSTRAINT [FK_Rating_Genre] FOREIGN KEY ([GenreID]) 
    REFERENCES [dbo].[Genre] ([GenreID]) 
    ON DELETE CASCADE ON UPDATE CASCADE, 
  CONSTRAINT [FK_Rating_User] FOREIGN KEY ([UserID]) 
    REFERENCES [dbo].[User] ([UserID]) 
    ON DELETE CASCADE ON UPDATE CASCADE ); 

我想通过1个当前用户显示8种不同类型的8种不同评级值。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望根据另一个有辨别力的列将您的标签映射到不同的列:

using (var conn = new SqlConnection(connection))
using (var comm = new SqlCommand("SELECT * from dbo.Rating where UserID=@userId", conn))
{
    comm.Parameters.AddWithValue("@userId", _userId);
    conn.Open();
    using (var reader = comm.ExecuteReader())
    {
        if (reader.HasRows && reader.Read())
        {
            FB.Text = reader["GenreID"].ToString() == "1"
               ? reader["RatingValue"].ToString();
               : reader["SomeOtherColumn"].ToString();
        }
    }
}

如果要映射的一个或多个列位于Rating以外的另一个表中,则需要加入该表 - 我们需要查看您的表结构以帮助您。

编辑,重新显示8种类型

我假设User和Genre表都有一列Name - 加入这些表以查找评级。 GROUP and MAX将消除同一用户在同一类型中具有多个评级的任何情况(如果您需要,请将MAX切换为AVGMIN。前8名将限制流派。所以像这样调整Sql:

SELECT TOP 8 u.Name AS UserName, g.Name as GenreName, MAX(r.RatingValue) AS TopRating
FROM dbo.Rating r
  INNER JOIN dbo.[User] u
    ON r.UserId = u.UserID
  INNER JOIN dbo.[Genre] g
    ON r.GenreID = g.GenreID
WHERE UserID=@userId
GROUP BY u.Name, g.Name
ORDER BY g.Name;

现在,对于用户界面,您将无法在单个标签中显示表格。最简单的方法是将读者的结果直接绑定到WebForm上的新GridView控件

    using (var reader = comm.ExecuteReader())
    {
        if (reader.HasRows)
        {
            gridView.DataSource = reader;
            gridView.DataBind();            
        }
    }

这将显示一个表格,其中3列与所选列匹配,最多可显示8行。