如何从先前的SHOW TABLES查询中对表运行查询?我要做的是创建一个每24小时运行一次的PHP脚本,通过“已验证”降序和“投票”降序对表进行排序,并为数据库中的每个表更新顶部结果上的“nomnom”。
$result = $conn->query("SHOW TABLES");
if($result->num_rows > 0) {
while($row = $result->fetch_array()) {
$sql = "SET @clan = (SELECT clan FROM " . $row[0] . " ORDER BY verified DESC, votes DESC LIMIT 1); UPDATE " . $row[0] . " SET nomnom=0 verified=0; UPDATE " . $row[0] . " SET nomnom=1 WHERE clan=@clan";
$conn->query($sql);
echo $row[0] . ' done<br>';
}
} else {
echo 'query 0';
}
这正确地回显了每个表名后跟do,但实际上并没有更新表。我错过了什么?
更新
所以我确定以下内容应该有效:
$sql = "SET @clan := (SELECT `clan` FROM " . $row[0] . " ORDER BY `verified` DESC, `votes` DESC LIMIT 1); UPDATE " . $row[0] . " SET `nomnom`=0, `verified`=0; UPDATE " . $row[0] . " SET `nomnom`=1 WHERE `clan`=@clan";
通过回显$ sql并运行通过phpmyadmin返回的查询而不更改任何内容。 这是一条被回应的线。
SET @clan:=(SELECT
clan
FROM aerngardh ORDER BYverified
DESC,votes
DESC LIMIT 1);更新aerngardh SETnomnom
= 0,verified
= 0;更新aerngardh SETnomnom
= 1 WHEREclan
= @ clan
由于某些原因,使用
时实际上并没有这样做$conn->query($sql);
更新2
想出一种让它发挥作用的方法。会标记我的答案,但我不能坚持2天......
答案 0 :(得分:0)
尝试此查询
$sql = SET @clan := (SELECT clan FROM aerngardh ORDER BY verified DESC, votes DESC LIMIT 1); UPDATE aerngardh SET nomnom=0, verified=0; UPDATE aerngardh SET nomnom=1 WHERE clan=@clan
这应该有效
答案 1 :(得分:0)
必须将查询拆分为3个单独的查询。完整的工作代码:
$conn = new MySQLi($servername, $username, $password, $dbname);
$result = $conn->query("SHOW TABLES");
if($result->num_rows > 0) {
while($row = $result->fetch_array()) {
$sql = "SET @clan := (SELECT clan FROM " . $row[0] . " ORDER BY verified DESC, votes DESC LIMIT 1);";
$sql2 = "UPDATE " . $row[0] . " SET nomnom=0, verified=0;";
$sql3 = "UPDATE " . $row[0] . " SET nomnom=1 WHERE clan=@clan";
$conn->query($sql);
echo $conn->error . '<br>';
$conn->query($sql2);
echo $conn->error . '<br>';
$conn->query($sql3);
echo $conn->error . '<br>';
}
} else {
echo 'query 0';
}
如果有人想发布如何使其成为正确的multi_query而不会导致查询不同步错误,请成为我的访客。我做那个哈哈。