0

非常に複雑な質問:

現在、「時刻表」という表があります。これは、誰かがスロットを予約したときに更新されます(これはラジオ予約システム用です)。私が欲しいのは、cronジョブとして15分ごとに実行できるPHPファイルです。PHPスクリプトで実行したいのは、ラジオの司会者が「時刻表」テーブルの「ユーザー名」フィールドを介して予約したスロットの数を数えることです。次に、「slot_count」というフィールドの「users」という別のテーブルのフィールドを、「username」の下の「timetable」テーブルで見つかったスロットの数で更新したいと思います。

現在、プレゼンターの「ユーザー名」を含むすべての予約済みスロットをテーブルにプルするスクリプトがあります。

<?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

COUNT()UPDATE:の両方を実行する1つのSQLステートメントを使用して実行することはできません。

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

仮定usernameフィールドには、テーブルとテーブルの両方で同じラジオプレゼンターの同じ値が含まれています。そうでなければ、それらは一致しません。PHPスクリプトを実行する代わりに、cronジョブからMySQLに対してこのクエリを直接実行できるはずです。userstimetable

于 2012-04-11T15:45:40.517 に答える
0

この冗長データをusersテーブルに保存する必要はありません。テーブルに適切なインデックスが付けられている限り、結合とカウントは簡単です-

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 に答える