0

很复杂的问题:

目前我有一张名为“时间表”的表格。当有人预订时段时更新(这是用于无线电预订系统)。我想要的是一个 PHP 文件,我可以作为 cron 作业每 15 分钟运行一次。在 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>");
}
?> 

有任何想法吗?

4

2 回答 2

0

不能使用一个 sql 语句同时执行COUNT()and来完成UPDATE

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

假设:对于两个表中的同一个广播主持人,该username字段包含相同的值。否则他们不会匹配。您应该能够从 cron 作业直接针对 MySQL 运行此查询(而不是执行 PHP 脚本)。userstimetable

于 2012-04-11T15:45:40.517 回答
0

无需将这些冗余数据存储在您的用户表中。只要对表进行了适当的索引,连接和计数就很简单-

SELECT users.*, COUNT(timetable.username) AS num_slots
FROM users
LEFT JOIN timetable
    ON users.username = timetable.username
GROUP BY users.id
于 2012-04-11T16:58:06.923 回答