从表中的字段计数,然后更新到不同表中的不同字段

时间:2012-04-11 15:36:00

标签: php mysql sql

相当复杂的问题:

目前我有一张名为“时间表”的表格。当有人预订插槽时(这是用于收音机预订系统),这会更新。我想要的是一个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>");
}
?> 

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

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

假设username字段在userstimetable表中包含相同无线电演示者的相同值。否则他们就不匹配了。您应该能够从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