2012-04-11 20 views
0

Eine ziemlich komplexe Frage:Zählen von Feld in Tabelle dann Aktualisieren auf ein anderes Feld in einer anderen Tabelle

Im Moment habe ich eine Tabelle namens "Zeitplan". Dies wird aktualisiert, wenn jemand einen Slot bucht (dies ist für ein Radio-Buchungssystem). Was ich möchte, ist eine PHP-Datei, die ich alle 15 Minuten als Cron-Job ausgeführt haben könnte. In PHP-Skript möchte ich zählen, wie viele Slots ein Radiomoderator über das Feld "Benutzername" in der Tabelle "Stundenplan" gebucht hat. Dann möchte ich ein Feld in einer anderen Tabelle namens "users" in einem Feld namens "slot_count" mit der Anzahl der Slots aktualisieren, die in der Tabelle "timetable" unter ihrem "username" gefunden wurden.

Im Moment habe ich ein Skript, das alle gebuchten Slots mit ihrem Moderator „username“ 's in eine Tabelle zieht:

<?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>"); 
} 
?> 

Irgendwelche Ideen?

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

Annahme:

Antwort

0

Das Speichern dieser redundanten Daten in Ihrer Benutzertabelle ist nicht erforderlich. Solange die Tabellen der in geeigneter Weise zu verbinden und Zählung sind trivial indiziert werden -

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

Kann es nicht ein SQL-Anweisung zu tun beide COUNT() und UPDATE getan wird unter Verwendung das username Feld denselben Wert für den gleichen Radiomoderator enthält sowohl users und timetable Tabellen. Sonst würden sie nicht zusammenpassen. Sie sollten run this query directly against MySQL aus dem Cron-Job (anstatt das PHP-Skript) zu können.

+0

sind in der Lage Sie mir das in PHP-Code zu geben, etc – Logan

+0

@Logan Leider habe ich kein PHP Typ bin . Ich habe in meiner Antwort einen Link hinzugefügt, der Sie darauf hinweist, wie Sie SQL direkt gegen MySQL ausführen können, ohne überhaupt PHP zu benötigen. Besser geeignet für Cron Job IMHO. –

+0

Wüssten Sie, wie Sie diese Abfrage in cPanel einrichten? Ich bin in der Cron-Seite und es fragt nach dem "Befehl", der ausgeführt werden soll – Logan

Verwandte Themen