相当复杂的问题:
目前我有一张名为“时间表”的表格。当有人预订插槽时(这是用于收音机预订系统),这会更新。我想要的是一个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>");
}
?>
有什么想法吗?
答案 0 :(得分:0)
不能使用一个同时执行COUNT()
和UPDATE
的sql语句来完成:
UPDATE users
SET slot_count = (SELECT COUNT(*) FROM timetable WHERE timetable.username = users.username)
假设:username
字段在users
和timetable
表中包含相同无线电演示者的相同值。否则他们就不匹配了。您应该能够从cron作业run this query directly against MySQL(而不是执行PHP脚本)。
答案 1 :(得分:0)
不需要在用户表中存储此冗余数据。只要表格被正确编入索引,连接和计数就很简单 -
SELECT users.*, COUNT(timetable.username) AS num_slots
FROM users
LEFT JOIN timetable
ON users.username = timetable.username
GROUP BY users.id