2016-08-08 32 views
0

如何開始在以前的SHOW TABLES查詢的表上運行查詢?我想要做的是創建一個每24小時運行一次的PHP腳本,該腳本通過「已驗證」降序和「投票」降序對錶格進行排序,並對頂級結果中的「nomnom」更新數據庫中的每個表格。PHP在SHOW TABLES結果上運行查詢

$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 [email protected]"; 
     $conn->query($sql); 
     echo $row[0] . ' done<br>'; 
    } 
} else { 
    echo 'query 0'; 
} 

這正確回聲每個表的名稱,然後完成,但實際上並沒有更新的表。我錯過了什麼?

UPDATE

所以我已經確定了以下應工作:

$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`[email protected]"; 

呼應$ SQL和運行查詢返回通過phpmyadmin在不改變任何東西。 這裏有一條回聲。

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 = @氏族

它只是出於某種原因沒有實際使用

$conn->query($sql); 

更新時,2

想出一個辦法來這樣做讓它起作用。將標誌着我的答案,但我不能2天...

+0

嘗試解釋更多。請 –

+0

看起來您在第一個set語句之前缺少更新,我打賭如果您嘗試在phpmysql中運行您的語句,它們將失敗。 – Danimal

+0

您是否嘗試過回顯您的查詢並在db中運行它 – coder

回答

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 [email protected] 

這應該工作

+0

這也行不通。我已經在phpmyadmin中的單個表上測試了查詢,以確保查詢實際上按照我的要求進行了操作,並且它正確地更新了表,但它似乎不會設置「@ clan」變量,也不會嘗試使用該變量通過PHP完成。 – JoshQuake

+0

嘗試了編輯。 – JoshQuake

+0

不要在db.try中嘗試它在瀏覽器中,因爲稍後會添加值 – coder

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 [email protected]"; 
     $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沒有得到查詢不同步的錯誤,是我的客人。我cba在做這個笑話。