tabellen planung/überlegung (help!)

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

  • tabellen planung/überlegung (help!)

    hi leute,

    ich habe folgendes:

    tabelle 1

    id
    start (datetime)
    end (datetime)

    tabelle 2

    id
    id_tabelle1
    name
    vorname
    content

    in tabelle 1 wird eingetragen wann informationen zu sehen/online sind (vielleicht dort lieber mit timestamp arrbeiten?) und in tabelle 2 sind die informationen gespeichert, unterschiedlich viele, verknüpft mit tabelle 1 (id_tabelle1)!

    ich möchte nun die höchste/letzte id aus tabelle 1 auslesen welche noch nicht online ist, also currentdate noch nicht start und auch nicht ende ist.

  • #2
    Stichwort JOINS. Siehe auch den Sticky in diesem Forum.

    Kommentar


    • #3
      das ich die tabelle join'e ist mir klar. mal anders:

      PHP-Code:
      $currentdate date("Y-m-d H:i");

      $sql "SELECT
                  tabelle1.id,
                  DATE_FORMAT(tabelle1.start, '%d.%m.%y %H:%i') AS startdate,
                  DATE_FORMAT(tabelle1.end, '%d.%m.%y %H:%i') AS enddate,
                  tabelle2.name,
                  tabelle2.vorname
                  FROM
                           tabelle1
                  LEFT JOIN
                  tabelle2 ON tabelle1.id = tabelle2.id_tabelle1
               WHERE
                  tabelle1.end <= '"
      .$currentdate."'
               ORDER BY
                  tabelle1.id ASC, tabelle2.id ASC"
      ;
      $result =mysql_query($sql);
      while(
      $row mysql_fetch_assoc($result)) {
        echo 
      $row['name'];
        echo 
      $row['vorname'];

      ich möchte nun folgendes auslesen. den eintrag aus tabelle1 der der letzte ist und das end (datetime) vergangen, also kleiner als das currentdate!

      irgendwie stehe ich auf der leitung!

      Kommentar


      • #4
        ORDER BY
        tabelle1.end DESC limit 1
        Slava
        bituniverse.com

        Kommentar


        • #5
          Original geschrieben von Slava
          ORDER BY
          tabelle1.end DESC limit 1
          danke fürs durchlesen, wäre aber zu einfach!

          ich habe in tabelle2 mindestens 10 einträge die ich auslesen will, wenn ich es so mache bekomme ich ein wert ausgelesen.

          Kommentar


          • #6
            so hab ich es nun, kann mir das vielleicht einer in ein select schreiben?

            PHP-Code:
            $currentdate date("Y-m-d H:i");

            $sql "SELECT MAX(id) AS id FROM tabelle1 WHERE end <= '".$currentdate."'";
            $result mysql_query($sql);
            $row mysql_fetch_assoc($result);

            $hund $row['id'];

            $sql "SELECT
                        tabelle1.id,
                        DATE_FORMAT(tabelle1.start, '%d.%m.%y %H:%i') AS startdate,
                        DATE_FORMAT(tabelle1.end, '%d.%m.%y %H:%i') AS enddate,
                        tabelle2.name,
                        tabelle2.vorname
                        FROM
                                 tabelle1
                        LEFT JOIN
                        tabelle2 ON tabelle1.id = tabelle2.id_tabelle1
                     WHERE
                        tabelle1.end <= '"
            .$currentdate."' AND tipgame.id = '".$hund."'
                     ORDER BY
                        tabelle1.id ASC, tabelle2.id ASC"
            ;
            $result =mysql_query($sql);
            while(
            $row mysql_fetch_assoc($result)) {
              echo 
            $row['name'];
              echo 
            $row['vorname'];

            Kommentar


            • #7
              PHP-Code:
              SELECT
                          tabelle1
              .id,
                          
              DATE_FORMAT(tabelle1.start'%d.%m.%y %H:%i') AS startdate,
                          
              DATE_FORMAT(tabelle1.end'%d.%m.%y %H:%i') AS enddate,
                          
              tabelle2.name,
                          
              tabelle2.vorname
                          FROM
                                   tabelle1
                          LEFT JOIN
                          tabelle2 ON tabelle1
              .id tabelle2.id_tabelle1
                       WHERE
                          tabelle1
              .end <= '".$currentdate."' AND tipgame.id 
              (
              SELECT MAX(id) AS id FROM tabelle1 WHERE end <= '".$currentdate."'")
                       ORDER BY
                          tabelle1.id ASC, tabelle2.id ASC 
              Geht aber erst ab Mysql 4.1
              Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

              Kommentar


              • #8
                hey, danke... sowas habe ich mir auch schon angelesen funktionierte nur nicht. leider will deine abfrage hier auch nicht funktionieren, bist dir sicher das das ab mysql 4.1 funzt? ich habe v 4.1.15 und er bringt mir auch ein syntax fehler. *grummel*

                Kommentar


                • #9
                  mit den Subqueries bin ich sicher, siehe
                  Mysql-Doku

                  Ich hab das gestern nur auf die schnelle zusammengestellt.
                  Scheint mir ein " zu viel zu sein:

                  PHP-Code:
                  $sql "SELECT
                              tabelle1.id,
                              DATE_FORMAT(tabelle1.start, '%d.%m.%y %H:%i') AS startdate,
                              DATE_FORMAT(tabelle1.end, '%d.%m.%y %H:%i') AS enddate,
                              tabelle2.name,
                              tabelle2.vorname
                              FROM
                                       tabelle1
                              LEFT JOIN
                              tabelle2 ON tabelle1.id = tabelle2.id_tabelle1
                           WHERE
                              tabelle1.end <= '"
                  .$currentdate."' AND tipgame.id = 
                  (SELECT MAX(id) AS id FROM tabelle1 WHERE end <= '"
                  .$currentdate."')
                           ORDER BY
                              tabelle1.id ASC, tabelle2.id ASC"

                  Zuletzt geändert von thommyk; 19.10.2006, 14:09.
                  Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                  Kommentar


                  • #10
                    das " habe ich gestern schon entdeckt, geht trotzdem nicht bei meinem 4.1.15 mysql.

                    sehr eigenartig! ich gehe dem ganze mal weiter auf den grund, danke dir recht herzlich für deine bemühungen!

                    cheers frash

                    Kommentar


                    • #11
                      geht trotzdem nicht bei meinem 4.1.15 mysql.
                      Soll heissen? fehlermeldungen?
                      Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                      Kommentar

                      Lädt...
                      X