tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
20
ZUGRIFFE
623
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Guten Morgen,

    ich mal wieder... und gleich zu Anfangs mit meinem üblichen Titelproblem. Sollte jemand eine Idee für einen aufschlussreicheren Titel haben, editiere ich ihn gerne!

    Aber nun zu meinem Problem:

    Ich habe in einer Datenbanktabelle ein Feld, wo das Datum mittels "datetime" abgespeichert wird. Somit habe ich Datensätze mit dem Inhalt NULL oder Datumsangaben im Format von "2004-10-21 19:40:28".

    Nun möchte ich alle Datensätze auslesen, bei denen das Datum älter als eine Woche ist. Möglich muss es schon sein, oder? Aber ich habe leider absolut keine Idee wie man das am besten macht, vor allem, weil das ja alles in den WHERE-Bereich der Abrage muss - da kann ich auch keinen zeilenlangen Code hinein quetschen?
    Ich dachte mir am ehesten mal generell ein Timestamp zu erzeugen, das eine Woche alt ist (also aktuelles Timestamp minus einer Woche). Damit ich mal einen Anhaltspunkt habe. Und dann müsste ich in der Where-Abfrage das Datum mittels strtotime(); in ein Timestamp umwandeln und dann schauen, welches Timestamp in der Datenbank kleiner gleich mein zuvor generiertes Timestamp ist...? Aber das kann ich nicht alles in den WHERE-Bereich packen, oder? Irgendwie erschließt sich mir das nicht ganz... vor allem: Kann ich im WHERE-Bereich überhaupt das datetime in ein Timestamp umwandeln und dann mit dem Timestamp Wert weiter machen?

    Vielleicht kann jemand ein Stichwort oder eine andere Hilfestellung eben in den Raum werfen, an der ich weiter knabbern kann? Wäre wirklich dankbar!

    Liebe Grüße
     

  2. #2
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Code sql:
    1
    2
    3
    
    SELECT * FROM  `table` 
     
    WHERE `datefield` < DATE_SUB(NOW() , INTERVAL 7 DAY)

    Könnte funktionieren, habs nicht getestet.
    CoverUnder bedankt sich. 
    Die Schweine von heute sind unsere Schnitzel von morgen!

  3. #3
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Hmmm... irgendetwas streikt. Es fragt sich nur was. Eine Fehlermeldung habe ich leider nicht, nur eine weiße Seite. Hab es mit

    PHP-Code:
    error_reporting(E_ALL);
    ini_set('display_errors'1); 
    versucht, aber trotzdem keine Meldung.
    Hier der Code - wenn, dann muss hier der Hund begraben sein, denn der Rest wurde nicht verändert:

    PHP-Code:
    $sql="SELECT
    k.id,
    i.datefield
    FROM
    tbl1 AS i,
    tbl2 AS k LEFT JOIN tbl3 AS b ON k.id = b.id
    WHERE datefield < DATE_SUB(NOW() , INTERVAL 7 DAY)
    AND 
    b.id IS NULL 
    ORDER BY datefield ASC"

     

  4. #4
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    ERstens:

    PHP-Code:

    mysql_query
    ($sql) or die (mysql_error()); 
    zweitens:

    heist dein Feld auch "datefield" das habe ich in meinem Beitrag nur so genannt weil ich deine Tabellenstruktur nicht kenne.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  5. #5
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Den Feldnamen hab ich im Script angepasst und nur hier wieder geändert - fürs schnellere Verständnis, hab ich deinen Namen dann wieder übernommen.

    Aber nach einem erneuten Versuch bekomme ich jetzt eine Meldung, allerdings keine PHP Fehlermeldung, sondern:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    Internal Server Error
     
    The server encountered an internal error or misconfiguration and was unable to complete your request.
     
    Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
     
    More information about this error may be available in the server error log.

    Interpretiere ich das richtig, wenn ich sage, dass das Script wohl funktioniert, aber der Server es nicht gebacken kriegt? Sprich, die Abfrage "zu groß" ist?
     

  6. #6
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Schau doch mal ins ErrorLog deines Apachen.
    Irgendwo hast in PHP nen Fehler mit drinne.
    Zeig doch mal den kompletten Abschnitt wo du die Abfrage ausführst und die entsprechende Schleife dazu.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  7. #7
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Ich glaube nicht, dass ich den ErrorLog einsehen kann? :/

    Okay, hier der komplette Abschnitt:


    PHP-Code:
    // Liest die Kunden aus, die in der Tabelle orders nicht vorkommen
    $sql="SELECT
    k.customers_id,
    k.customers_firstname,
    k.customers_lastname,
    k.customers_gender,
    k.customers_email_address,
    k.customers_date_added,
    i.customers_info_date_of_last_logon
    FROM customers_info AS i,
    customers AS k LEFT JOIN orders AS b ON k.customers_id = b.customers_id
    WHERE customers_info_date_of_last_logon < DATE_SUB(NOW() , INTERVAL 7 DAY)
    AND
    b.customers_id IS NULL 
    ORDER BY customers_info_date_of_last_logon ASC"
    ;
    $res mysql_db_query($mysqldb$sql$mysql);
    while (
    $row mysql_fetch_assoc($res)) {
        
        
    $customers_id $row['customers_id']; 
        
    $customers_firstname $row['customers_firstname'];
        
    $customers_lastname $row['customers_lastname'];
        
    $customers_gender $row['customers_gender'];
        
    $customers_email_address $row['customers_email_address'];
        
    $customers_date_added $row['customers_date_added'];
        
        
    //Pr&uuml;ft das Geschlecht
        
    if($customers_gender == "m")
        {
          
    $customers_gender "Herr";
        }
        elseif(
    $customers_gender == "f")
        {
          
    $customers_gender "Frau";
        }
        
        
    //Schaut, ob Sachen im Warenkorb sind
        
    $anzahl_sql mysql_db_query("$mysqldb""SELECT * FROM customers_basket WHERE customers_id = '$customers_id'"); 
       
    $anzahl mysql_num_rows($anzahl_sql);
       
       if(
    $anzahl != '0')
       { 
    $wako "JA"; }
       else { 
    $wako "Nein"; }
       
       
       
       
        
        include(
    "kundenliste.html");
        
        } 
     

  8. #8
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    PHP-Code:
    mysql_db_query("$mysqldb")
    // müsste das nicht so aussehen?
    mysql_db_query($mysql_db
    Und lass dir bitte wenn der Query nicht funktioniert die Fehlermeldung dazu ausgeben:

    PHP-Code:
    $res mysql_db_query($mysqldb$sql$mysql) or die("Error:\r Query: ".$sql."\r\r Error-Message: "   mysql_error()); 
    CoverUnder bedankt sich. 
    Die Schweine von heute sind unsere Schnitzel von morgen!

  9. #9
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Vielen Dank!
    Die Meldung kommt nun nicht mehr - bin aber wieder bei der weißen, leeren Seite - trotz mysql_error ()); und error_reporting(E_ALL); sowie ini_set('display_errors', 1);
     

  10. #10
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Dann hast du einen syntaktischen Fehler wahrscheinlich sehr direkt am Anfang der Datei.

    Entweder, du postet die komplette Datei oder kommst irgendwie an die Server-Logs ran.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  11. #11
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Die komplette Datei:


    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    ini_set('display_errors'1);

    // Datenbankverbindung herstellen
    include ('../../includes/configure.php');

    $mysqlhost DB_SERVER;
    $mysqluser DB_SERVER_USERNAME;
    $mysqlpassword DB_SERVER_PASSWORD;
    $mysqldb DB_DATABASE;

    $mysql mysql_connect($mysqlhost$mysqluser$mysqlpassword); 
    $selectdb mysql_select_db($mysqldb);

    if(!
    $mysql) {
    echo(
    "Keine Verbindung zum MySQL-Server m&ouml;glich<br/ >".mysql_error());
    }
    if(!
    $mysqldb) {
    echo(
    "Konnte Datenbank nicht Ausw&auml;hlen<br />".mysql_error());
    }


    $aktuelles_jahr date("y");
    $aktuelles_monat date("m");
    $timestamp strtotime("-1 months");
    $letzter_monat date("y-m"$timestamp);



    //Header
    include("kundenliste_head.html");



    // Liest die Kunden aus, die in der Tabelle orders nicht vorkommen
    $sql="SELECT k.customers_id, k.customers_firstname, k.customers_lastname, k.customers_gender, k.customers_email_address, k.customers_date_added, i.customers_info_date_of_last_logon FROM customers_info AS i, customers AS k LEFT JOIN orders AS b ON k.customers_id = b.customers_id WHERE customers_info_date_of_last_logon < DATE_SUB(NOW() , INTERVAL 7 DAY) AND b.customers_id IS NULL  ORDER BY customers_info_date_of_last_logon ASC";
    $res mysql_db_query($mysqldb$sql$mysql) or die("Error:\r Query: ".$sql."\r\r Error-Message: "   mysql_error());  
    while (
    $row mysql_fetch_assoc($res)) {
        
        
    $customers_id $row['customers_id']; 
        
    $customers_firstname $row['customers_firstname'];
        
    $customers_lastname $row['customers_lastname'];
        
    $customers_gender $row['customers_gender'];
        
    $customers_email_address $row['customers_email_address'];
        
    $customers_date_added $row['customers_date_added'];
        
        
    //Pr&uuml;ft das Geschlecht
        
    if($customers_gender == "m")
        {
          
    $customers_gender "Herr";
        }
        elseif(
    $customers_gender == "f")
        {
          
    $customers_gender "Frau";
        }
        
        
    //Schaut, ob Sachen im Warenkorb sind
        
    $anzahl_sql mysql_db_query($mysqldb"SELECT * FROM customers_basket WHERE customers_id = '$customers_id'"); 
       
    $anzahl mysql_num_rows($anzahl_sql);
       
       if(
    $anzahl != '0')
       { 
    $wako "JA"; }
       else { 
    $wako "Nein"; }
       
       
       
       
        
        include(
    "kundenliste.html");
        
        }

    //Footer
    include("liste_bearbeitet_foot.html");
        
        
    mysql_close($mysql);

    ?>
     

  12. #12
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    Verwende mal anstatt
    PHP-Code:
    mysql_db_query() 
    dieses:
    PHP-Code:
    mysql_query() 
    mysql_db_query()

    Ist seit der Version 5.3 deprecated.
     
    Die Schweine von heute sind unsere Schnitzel von morgen!

  13. #13
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Danke für die Info, wusste ich nicht und hab es jetzt geändert - aber nach wie vor keine Reaktion. Es müsste eigentlich an der SQL Abfrage liegen - mit einer anderen Abfrage funktioniert es nämlich tadellos.

    Hier die Abfrage, die funktioniert - als Vergleich:

    PHP-Code:
    $sql="SELECT
    k.customers_id,
    k.customers_firstname,
    k.customers_lastname,
    k.customers_gender,
    k.customers_email_address,
    k.customers_date_added
    FROM
    customers AS k LEFT JOIN orders AS b ON k.customers_id = b.customers_id
    WHERE
    k.customers_date_added LIKE '2011-12-%'
    AND
    b.customers_id IS NULL
    ORDER BY customers_date_added DESC"

     

  14. #14
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Tausch mal bitte diese Zeile aus:

    Code php:
    1
    
    $res = mysql_db_query($mysqldb, $sql, $mysql) or die("Error:\r Query: ".$sql."\r\r Error-Message: "   mysql_error());

    durch das hier:

    Code php:
    1
    
    $res = mysql_query($sql, $mysql) or die("Error: Query: ".$sql."<br/>Error-Message: "  . mysql_error($mysql));
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  15. #15
    CoverUnder CoverUnder ist offline Mitglied Silber
    Registriert seit
    Mar 2009
    Beiträge
    71
    Dann kommt wieder diese Meldung:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    Internal Server Error
     
    The server encountered an internal error or misconfiguration and was unable to complete your request.
     
    Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
     
    More information about this error may be available in the server error log.
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 19.10.07, 08:45
  2. Antworten: 3
    Letzter Beitrag: 05.01.06, 16:17
  3. SQL-Abfrage zum "geteilten" export nach Excel
    Von rockabillyjimmy im Forum Relationale Datenbanksysteme
    Antworten: 9
    Letzter Beitrag: 30.05.05, 13:41
  4. Antworten: 47
    Letzter Beitrag: 04.04.05, 11:46
  5. Antworten: 14
    Letzter Beitrag: 23.02.04, 09:35

Stichworte