我需要通过使用sql查询排序从一组玩家中获得排名。
我有查询。
query = @"SET @rank=0;
SELECT player_ID,player_name,HP,@rank:=@rank+1 As Rank
FROM player_profile ORDER BY HP DESC;"
问题是我只需要从此查询中指定玩家的等级。
由于使用SQL生成rank,因此我无法使用WHERE子句。这将使一个玩家从DB中获得一个等级。
我试图将它们全部放入数据表中,然后从中过滤掉单个值。
con.Open();
MySqlDataAdapter dt = new MySqlDataAdapter();
DataTable tt = new DataTable();
string query = @"SET @rank=0;
SELECT player_ID,player_name,HP,@rank:=@rank+1 As Rank
FROM player_profile ORDER BY HP DESC;";
MySqlCommand cm1 = new MySqlCommand(query, con);
dt.SelectCommand = cm1;
dt.Fill(tt);
con.Close();
DataRow[] foundRows = tt.Select("player_name=" + Label2.Text); // Error:Cannot find column ["Column name"]
foreach (DataRow dr in foundRows)
{
Label32.Text = dr["Rank"].ToString();
}
这就是我的表格 http://pastebin.com/7KWJ9bn3
感谢任何帮助。
答案 0 :(得分:1)
我非常支持不在您的SQL中放置业务逻辑,而这似乎就像您在这里所做的那样。下面的代码是我的代码的更新版本,它应该在逻辑上等效,而不必在SQL方面进行任何计算。
我不完全确定你要实现的目标(这个示例代码是什么?)所以如果你可以提供更多信息我可以更多地改进这个,但是这又会在&中做同样的事情#34;更好"方式。
con.Open();
MySqlDataAdapter dt = new MySqlDataAdapter();
DataTable tt = new DataTable();
string query = @"SET @rank=0;
SELECT player_ID,player_name,HP
FROM player_profile ORDER BY HP DESC;";
MySqlCommand cm1 = new MySqlCommand(query, con);
dt.SelectCommand = cm1;
dt.Fill(tt);
con.Close();
DataRow[] foundRows = tt.Select("player_name=" + Label2.Text); // Error:Cannot find column ["Column name"]
int count = 1;
foreach (DataRow dr in foundRows)
{
Label32.Text = count;//dr["Rank"].ToString();
count++;
}
答案 1 :(得分:0)
如何从结果表中进行选择?
string query = @"SET @rank=0;
Select a.Rank from (SELECT player_ID,@rank:=@rank+1 As Rank
FROM player_profile ORDER BY HP DESC) a where player_ID=@1";