/*
* Darsteller-Liste von Martin K.
*
*/
/*
Mit Zwischendatei
0.295 Sekunden für's Erstellen einer Zwischendatei
0.014 Sekunden für's Einlesen
Das Erstellen der Liste dauerte 55.736 Sekunden
Nach Optimierung
0.130 Sekunden für's Erstellen einer Zwischendatei
0.062 Sekunden für's Einlesen
Das Erstellen der Liste dauerte 34.489 Sekunden
*/
// Stellt eine Verbindung mit der Datenbank her
include_once('_dbinit.php');
include_once('funktionen.php');
// $link = mysql_connect("localhost","sysdba","masterkey");
// Test, ob die Datenbank videos schon existiert
if (!mysql_query("SELECT * FROM mk_videos WHERE 1", $link)) {
echo "
Die Datenbank fehlt! Bitte eine Datenliste zum Import auswählen!
";
error_reporting(0);
include('restore.php');
break;
error_reporting(E_ALL);
}
/* @ explain Hauptteil dieser Routine
*/
function liste_darsteller($abfrage,$anzeige){
// Filmtitel einlesen
$startdat = microtime();
$sql_film = "SELECT * FROM mk_videos WHERE 1 ORDER BY id ASC";
$result = mysql_query($sql_film) or die(mysql_errno().": ".mysql_error()."
".$sql_film);
// Alle Filmtitel in ein Array schreiben
while($row = mysql_fetch_array($result)){
$filmname[$row['id']] = $row['titel'];
$filmart[$row['id']] = $row['genre'];
}
$result = mysql_query($abfrage) or die(mysql_errno().": ".mysql_error()."
".$abfrage);
// Ausgabe in Tabellenform, der einfacheren Formatierung wegen
echo "
";
$nummer = 1;
$platz = 0;
while($row = mysql_fetch_array($result)){
if (($row['anzahl'] != $alt_anzahl) AND ($anzeige == "Platz")){
$alt_anzahl = $row['anzahl'];
$platz++;
echo "*** | *** | ******************** |
";
}
echo "".$anzeige." | ";
if ($anzeige == "Platz"){
echo $platz." ".$nummer."";
}else{
echo $nummer;
}
echo " | ";
echo " ".$row['name']." ";
echo " | ";
echo "mit insgesamt | ".$row['anzahl']." | Filmen:
| ";
echo "";
$lebenswerk = explode("+",$row['filme']);
$i = 0;
# while (($i < count($lebenswerk)) AND ($lebenswerk[$i] != '')){
while ($i < count($lebenswerk)-1){
echo "";
echo $filmname[$lebenswerk[$i]]." (".$filmart[$lebenswerk[$i]].")";
echo ""; // Link-Ende
echo " ";
$i++;
}
echo " |
";
$nummer++;
}
echo "
Anzeige der Tabelle in ".timer_mk($startdat);
}
// Hier beginnt erst das eigentliche Script
echo "";
echo " Zurück zur Video-Liste || ";
echo " Darstellerliste neu berechnen (bitte etwas Geduld...) || ";
echo " Auflistung nach Häufigkeit || ";
echo " Alphabetische Auflistung ";
echo "
";
// Test, ob die Datenbank darsteller schon gefüllt ist; ausgehend von der Annahme, daß irgendein Darsteller den Buchstaben g im Namen hat ...
if (!mysql_num_rows(mysql_query("SELECT * FROM mk_darsteller WHERE name LIKE '%g%'"))) {
// Vorbereitung
$startdat = microtime();
$sql = "SELECT * FROM mk_videos WHERE 1 ORDER BY id ASC";
$result = mysql_query($sql) or die(mysql_errno().": ".mysql_error()."
".$sql);
// Alle Darsteller Film für Film in einen String schreiben
while($row = mysql_fetch_array($result)){
$ret = $row['darsteller'];
$ret = str_replace(" - ","\r\n",$ret);
$ret = str_replace(", ","\r\n",$ret);
$daten = explode("\r\n", $ret);
for ($i=0; $i";
# }
}
}
}
echo timer_mk($startdat)." für's Erstellen einer Zwischendatei
";
// Den oben erstellten String kompaktieren und Filmliste erstellen
$startdat = microtime();
$tmp = explode("; ", $zwischendatei);
$anzahl_darsteller = count($tmp);
$daten = array_unique($tmp);
sort($daten);
$datenmenge = count($daten);
$datenmenge = 1000;
echo timer_mk($startdat)." für's Einlesen
";
$startdat = microtime();
$sql = "TRUNCATE TABLE `mk_darsteller`"; // Datenbank Darsteller leeren
mysql_query($sql);
// Schleife: alle Namen aus der Darstellerliste
for ($a=0; $a<$datenmenge; $a++){
$zeile = trim($daten[$a]);
if ($zeile != ''){
$sql = "SELECT * FROM `mk_videos` WHERE `darsteller` LIKE '%".$zeile."%' ORDER BY id ASC";
$result = mysql_query($sql);
$filmauflistung = "";
$filmanzahl = 0;
while($row = mysql_fetch_array($result)){
$filmauflistung .= $row['id']."+";
$filmanzahl++;
} # Ende while
$sql = "INSERT INTO `mk_darsteller` (`id`, `name`, `anzahl`, `filme`) ";
$sql .= "VALUES ('', ";
$sql .= "'".$zeile."', ";
$sql .= "'".$filmanzahl."', ";
$sql .= "'".$filmauflistung."')";
mysql_query($sql);
}
}
echo "Das Erstellen der Liste dauerte ".timer_mk($startdat)."
";
echo "
Erkannte Anzahl Darsteller: ".($anzahl_darsteller).", davon ";
echo mysql_num_rows(mysql_query("SELECT * FROM mk_darsteller WHERE 1"))." verschiedene.
";
}
switch($_GET['action']){
case "leeren" :
$sql = "TRUNCATE TABLE `mk_darsteller`"; // Datenbank Darsteller leeren
mysql_query($sql);
// Fenster schließen
echo "";
break;
case "abc" :
// Ausgabe aller Schauspieler, die in der Datenbank vertreten sind ...
$sql = "SELECT * FROM mk_darsteller WHERE 1 ORDER BY name ASC";
echo "
Alle vertretenen Schaupieler: (Alphabetische Reihenfolge)
";
liste_darsteller($sql,"Nummer");
break;
default :
// Standardaufruf: Anzeige der gefundenen Datensätze
// Ausgabe aller Schauspieler, die in mehr als 4 Filmen vertreten sind ...
$sql = "SELECT * FROM mk_darsteller WHERE anzahl > 3 ORDER BY anzahl DESC";
echo "
Die am häufigsten vertretenen Schaupieler sind: (mehr als drei Filme)
";
liste_darsteller($sql,"Platz");
break;
}
?>