2012-04-11 11 views
0

かなり複雑な質問:テーブルのフィールドから数えて、別のテーブルの別のフィールドに更新する

現在、私は "タイムテーブル"と呼ばれるテーブルを持っています。これは、誰かがスロットを予約したときに更新されます(これは、ラジオ予約システム用です)。私が望むのは、私がcronジョブとして15分ごとに実行できるPHPファイルです。 PHPスクリプトでは、ラジオプレゼンターが「タイムテーブル」テーブルの「ユーザー名」フィールドで予約したスロット数をカウントします。次に、 "username"の下の "timetable"テーブルで見つかったスロットの量で、 "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

この冗長データをユーザーテーブルに格納する必要はありません。限りテーブルが適切にインデックス化されているとして参加し、数些細ある -

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

それはCOUNT()UPDATEの両方をやって1つのSQL文を使用して行うことができません:

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

仮定usernameフィールドはuserstimetableの両方で同じ無線プレゼンターため同じ値が含まれていますテーブル。それ以外の場合は一致しません。あなたはrun this query directly against MySQL(PHPスクリプトを実行するのではなく)cronジョブから実行できるはずです。

+0

あなたはPHPコードで私にこれを与えることができていますなど – Logan

+0

@Logan申し訳ありませんが、私はPHPの男じゃない 。私は自分の答えに、PHPをまったく必要とせずにSQLをMySQLに対して直接実行する方法を指すリンクを追加しました。 cron job IMHOに適しています。 –

+0

cPanelでこのクエリを設定する方法を知っていますか?私はCronページにあり、実行されるべき "コマンド"を要求しています。 – Logan

関連する問題