2012-04-11 46 views
0

相當複雜的問題:從表中的字段計數,然後更新到不同的表中的不同字段

此刻我有一張名爲「時間表」的表。當有人預訂一個插槽(這是一個無線電預訂系統)時,這個更新。我想要的是一個PHP文件,我可以每15分鐘運行一次cron作業。在PHP腳本中,我想要做的是統計無線電演示者通過「時間表」表中的「用戶名」字段預訂了多少個插槽。然後,我希望它在名爲「slot_count」的字段中的另一個名爲「users」的表中更新一個字段,其中的「用戶名」下的「時間表」表中找到的時隙數量。

目前我有一個腳本,拉所有的預訂廣告與他們的演講「用戶名」的成表:

<?php 
include("../config.php"); 
include("functions.php"); 
if($logged["level"] == "HDJ" OR $logged["level"] == "SA") { 

echo "<table width=\"580px\" class=\"board\" border=\>"; 

$order = "SELECT * FROM timetable WHERE username <> 'No DJ'"; 
$result = mysql_query($order); 

// Error checking 
if (!$result) { 
    // output error, take other action 
} 
else { 
    while ($row=mysql_fetch_array($result)){ 
    // Append all results onto an array 
    $rowset[] = $row; 
    } 
} 
    foreach ($rowset as $row) { 
    echo "<tr><td>" . htmlspecialchars($row['username']) . "</td></tr>"; 
} 

    } else { 
echo ("<div class=\"caution\">Access is denied.</div>"); 
} 
?> 

任何想法?

UPDATE users 
SET slot_count = (SELECT COUNT(*) FROM timetable WHERE timetable.username = users.username) 

假設

回答

0

將這些冗餘數據存儲在用戶表中是不必要的。只要表索引適當的連接和計數是微不足道的 -

SELECT users.*, COUNT(timetable.username) AS num_slots 
FROM users 
LEFT JOIN timetable 
    ON users.username = timetable.username 
GROUP BY users.id 
0

不能使用它一個SQL語句做既COUNT()UPDATE要做的username字段包含兩個userstimetable爲同一電臺主持人的相同的值表。否則,他們不會匹配。您應該能夠從cron作業中獲得run this query directly against MySQL(而不是執行PHP腳本)。

+0

您是否能夠給我這個在PHP代碼等 – Logan 2012-04-11 15:50:04

+0

@Logan對不起,我不是一個PHP的傢伙 。我在我的答案中添加了一個鏈接,指出如何直接針對MySQL執行SQL,而不需要任何PHP。更適合於工作恕我直言。 – 2012-04-11 15:56:00

+0

你知道如何在cPanel中設置這個查詢嗎?我在Cron頁面,它要求執行的命令 – Logan 2012-04-11 16:01:30

相關問題