Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli查询以更新外出学生的排名列_Php_Sql_Mysqli - Fatal编程技术网

Php mysqli查询以更新外出学生的排名列

Php mysqli查询以更新外出学生的排名列,php,sql,mysqli,Php,Sql,Mysqli,我有学生数据库的sql表。 PHP脚本用于计票我使用此查询对学生进行排名此选择查询非常有效,但我想根据投票结果更新列 SELECT id, first, vote, @curRank := @curRank + 1 AS rank FROM student_table p, ( SELECT @curRank := 0 ) q ORDER BY vote DESC 更新: 这对我来说很有用:) Sql查询: $q = "SELECT * FROM tablename ORDER BY vot

我有学生数据库的sql表。

PHP脚本用于计票
我使用此查询对学生进行排名

此选择查询非常有效,但我想根据投票结果更新列

SELECT id, first, vote, @curRank := @curRank + 1 AS rank
FROM student_table p, (
SELECT @curRank := 0
) q
ORDER BY vote DESC
更新
这对我来说很有用:)

Sql查询:

$q = "SELECT * FROM tablename ORDER BY vote DESC";

check condition if(q->num_rows > 0){
$rank = 1;
then while loop($row = $q->fetch_assoc()) {
$id = $row['id'];
//update rank column
$q1 = "UPDATE tablename SET rank='".$rank"' WHERE id='".$id."' "
$rank++;
}

}//if close

下面是一个在MySQL中不使用变量的备用更新查询

update test
inner join (select id,name,vote,(select count(id) + 1 
                                 from test where id != t.id and vote > t.vote) as 'rank'
            from test t) derived_test
ON test.id = derived_test.id
set test.rank = derived_test.rank;

您可以查看此信息以了解等级是如何分配的

这不起作用,我只需要一个问题中的sql查询来更新列。上面的查询出现错误,所以我使用这种方式。。。更新学生_表集合排名=@curRank:=@curRank+1投票顺序描述;此查询没有错误,但列未更新。值仍然为零。我创建了与您相同的表结构,并尝试了……。您遇到了什么错误?非常棒它在phpmyadmin中工作,但在php mysqli_queryHappy编码中仍然不工作:)其他方法始终帮助:)@MarkPatel如果这对您有所帮助,你能考虑投票吗?
SET @r=0;
UPDATE student_table SET rank= @r:= (@r+1) ORDER BY vote DESC;
update test
inner join (select id,name,vote,(select count(id) + 1 
                                 from test where id != t.id and vote > t.vote) as 'rank'
            from test t) derived_test
ON test.id = derived_test.id
set test.rank = derived_test.rank;