Ankündigung

Einklappen
Keine Ankündigung bisher.

String-Vergleich mit mySQL

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String-Vergleich mit mySQL

    Folgendes Problem:
    Ich möchte eine Seite haben, die anzeigt, welche Filme auf meinem Rechener innerhalb der letzten 6 Tage hinzugefügt wurden. Dafür habe ich zuerst das Verzeichnis mit einem seperatem Skript ausgelesen:
    $link = mysql_connect('localhost', 'user, 'pass');
    mysql_select_db("db") or die("Auswahl der Datenbank fehlgeschlagen");

    $d = dir("../videos");
    while (false !== ($entry = $d->read())) {
    if ($entry != "." && substr_count($entry, "..") == 0 && substr_count($entry, "@") == 0){
    $query = "INSERT into filme (bez, Datum) VALUES ('".$entry."', CURRENT_DATE)";
    $result = mysql_query($query);
    }
    }
    $d->close();
    mysql_close($link);


    Soweit so gut. Auf der Hauptseite kann ich direkt nach dem auffüllen (und einer kleinen Modifikation der Daten) auch die ganze Sache darstellen:

    $newMov = "SELECT bez FROM filme WHERE DATE_SUB(CURDATE(),INTERVAL 6 DAY) <= datum";//Filme der letzten 6 Tage
    $oldMov = "SELECT bez FROM filme WHERE DATE_SUB(CURDATE(),INTERVAL 6 DAY) >= datum";/Filme älter als 6 Tage
    $newRes = mysql_query($newMov);
    $oldRes = mysql_query($oldMov);

    echo "<h1>Neuzugänge bei den Filmen während der letzten Woche:</h1>
    ";
    for ($i=0; $i<mysql_num_rows($newRes); $i++){
    echo mysql_result($newRes, $i)."
    ";
    }

    echo "<h1>Ansonsten noch das Altbewährte:</h1>";
    for ($i=0; $i<mysql_num_rows($oldRes); $i++){
    echo mysql_result($oldRes, $i)."
    ";
    }

    Funktioniert auch alles noch bestens...
    Um jetzt aber nicht jeden Film, den ich auf dem Dateisystem hinzufüge auch noch von Hand in die Datenbank eingeben muss, lese ich das Verzeichnis der Festplatte aus...

    $i = 0;
    $d = dir("../videos");
    while (false !== ($entry = $d->read())) {
    if ($entry != "." && substr_count($entry, "..") == 0 && substr_count($entry, "@") == 0){
    $fsMov[$i] = $entry;
    $i++;
    }
    }
    $d->close();

    Die Filme sind jetzt in $fsMov als Array gespeichert. Nun das Auslesen der Filme die schon in der DB gespeichert sind (stehen dann als Array in $dbMov):

    $result = mysql_query("SELECT bez From filme");
    $i = 0;
    while ($row = mysql_fetch_assoc($result)) {
    $dbMov[$i] = $row["bez"];
    $i++;
    }

    Nun vergleiche ich die beiden Arrays und füge die Unterschiede direkt in die DB ein (in der DB könnten nur dann mehr Filme sein, wenn ich welchen von der HD lösche - was ich nie tue...):

    $j = $i = 0;
    for($i=0; $i<count($dbMov); $i++){
    if ($dbMov[$i] == $fsMov[$j]){}
    else{
    mysql_query("INSERT Into filme (bez, Datum) VALUES ('".$fsMov[$j]."', CURRENT_DATE)");
    echo $fsMov[$j]." wurde hinzugefügt";
    $j++;
    }
    }


    Eigenltich sollte man ja davon ausgehen, dass die vorher ausgelesenen, dann zwischengespeicherten Filmbezeichnungen mit den erneut ausgelesenen übereinstimmen. Ich verzweifel aber langsam, da sie es natürlich nicht tun und ich keine Ahnung habe, woran das liegen könnte...

Lädt...
X