Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem bei Datenbankabfrage

Einklappen

Neue Werbung 2019

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

  • Problem bei Datenbankabfrage

    Hallo zusammen!

    Ich hab viel im Net gesucht, und hab einen Code gefunden, der ca das macht was ich möchte, nämlich ein Feature in mein Programm einzubauen, welches eine Liste von Datumsangaben (Geburtstage in dem Fall) in einem selbst definierten Zeitraum anzeigt.

    Ich hab versucht, das auf mein Script umzuändern:

    PHP-Code:
    <?
    $mysql = "SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, 
                DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('$datum_anfang',1,4),SUBSTRING($datum_ende,5,6)) 
                BETWEEN '$datum_anfang' AND '$datum_ende' ORDER BY gebm, gebd";
    ?>
    Dabei ist folgender MySQL-Code raugekommen:
    Code:
    SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('.08.26',1,4),SUBSTRING(12.31,5,6)) BETWEEN '.08.26' AND '12.31' ORDER BY gebm, gebd
    Die Abfrage ist korrekt (soll heißen, der Code ist gültig, hab ich auch in phpMyAdmin getestet), aber es wird nichts als Ergebnis ausgegeben, obwohl es viele Treffer geben müsste...

    Wo hab ich da noch einen Fehler?

    Vielen dank im Vorraus für jede Antwort!


  • #2
    Hallo,

    um dir weiterhelfen zu können, brauch ich noch mehr Code von dir. Wie wird zu DB connected, wie werden die Ergebnisse ausgelesen usw. Als überblick mal
    http://www.php.net/manual/de/ref.mysql.php

    lg

    Kommentar


    • #3
      Also das ist kein Problem, voila:

      PHP-Code:
      <?
          include('includes/include_funktionen.php');
          include('includes/stylesheet.css');

      //  ******* hier wird die Verbindung zu MySQL hergestellt *******
              db_link($db_link);
      //  ******* hier wird die Verbindung mit der Datenbank hergestellt *******    
              select_db($select_db, $MYSQL_db);
      //  ******* hier wird die Abfrage durchgeführt *******


      if(!isset($_GET["day_a"])) $_GET["day_a"] = date("d");
      if(!isset($_GET["month_a"])) $_GET["month_a"] = date("m");

      if(!isset($_GET["day_e"])) $_GET["day_e"] = date("d");
      if(!isset($_GET["month_e"])) $_GET["month_e"] = date("m");

      if(!isset($_GET["year"])) $_GET["year"] = date("Y");

      $start = mktime(0,0,0,$_GET["month_a"], $_GET["day_a"], $_GET["year"]);
      $end = mktime(0,0,0,$_GET["month_e"], $_GET["day_e"], $_GET["year"]); 

      $start = date(".m.d",$start);
      $end = date(".m.d",$end);
      echo $start;
      echo "
      ";
      echo $end;

      $zeit_tag = "
          <option value='01'>01</option>
          <option value='02'>02</option>
          <option value='03'>03</option>
          <option value='04'>04</option>
          <option value='05'>05</option>
          <option value='06'>06</option>
          <option value='07'>07</option>
          <option value='08'>08</option>
          <option value='09'>09</option>
          <option value='10'>10</option>
          <option value='11'>11</option>
          <option value='12'>12</option>
          <option value='13'>13</option>
          <option value='14'>14</option>
          <option value='15'>15</option>
          <option value='16'>16</option>
          <option value='17'>17</option>
          <option value='18'>18</option>
          <option value='19'>19</option>
          <option value='20'>20</option>
          <option value='21'>21</option>
          <option value='22'>22</option>
          <option value='23'>23</option>
          <option value='24'>24</option>
          <option value='25'>25</option>
          <option value='26'>26</option>
          <option value='27'>27</option>
          <option value='28'>28</option>
          <option value='29'>29</option>
          <option value='30'>30</option>
          <option value='31'>31</option>
      ";
      $zeit_monat = "
          <option value='01'>01</option>
          <option value='02'>02</option>
          <option value='03'>03</option>
          <option value='04'>04</option>
          <option value='05'>05</option>
          <option value='06'>06</option>
          <option value='07'>07</option>
          <option value='08'>08</option>
          <option value='09'>09</option>
          <option value='10'>10</option>
          <option value='11'>11</option>
          <option value='12'>12</option>
      ";

      ?>
      <form action="xxx.php" >
          <table>
           <tr>
              <td>von:</td>
              <td>
                  <table>
                   <tr>
                      <td>Tag</td>
                      <td>Monat</td>
                   </tr>
                   <tr>
                      <td><select name='day_a'><?=$zeit_tag?></select></td>
                      <td><select name='month_a'><?=$zeit_monat?></select></td>
                   </tr>
                  </table>
              </td>
              <td></td>
              <td>bis:</td>
              <td>
                  <table>
                   <tr>
                      <td>Tag</td>
                      <td>Monat</td>
                   </tr>
                   <tr>
                      <td><select name='day_e'><?=$zeit_tag?></select></td>
                      <td><select name='month_e'><?=$zeit_monat?></select></td>
                   </tr>
                  </table>
              </td>
              <td></td>
              <td><input type="submit" name="search_b" value="suchen" /></td>
           </tr>
          </table
      </form>
      <?


      $start_jahr = "1000";
      $start = $start_jahr.$start;

      $ende_jahr = "2005";
      $end = $ende_jahr.$end;

          $datum_anfang = $start;
          $datum_ende = $end;

          
      $start = date(".m.d",$start);
      $end = date(".m.d",$end);
      echo $start;
      echo "
      ";
      echo $end;
      echo "
      ";
          

      // Funktion: alle Datensätze anzeigen
          function suche_geburtstag($datum_anfang, $datum_ende)
          {
          ?>    <p align="center">[b]Im gewählten Zeitraum sind folgende Geburtstage:[/b]</p>
              <table align="center" border="1" cellpadding="5"><tr>
              <th><?= A_NAME ?></th>
              <th><?= A_BIRTHDAY ?></th>
              <th><?= A_EMAIL ?></th></tr><tr>
          <?

          $mysql = "SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, 
                  DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('$datum_anfang',1,4),SUBSTRING('$datum_ende',5,6)) 
                  BETWEEN '$datum_anfang' AND '$datum_ende' ORDER BY gebm, gebd";

                  echo $mysql;
                  $result = mysql_query($mysql);
              
                  while($row = mysql_fetch_assoc($result))
                  {
                      echo "<td class='anzeige'>";
                      echo ($row['FAMNAME'])." ".($row['VORNAME'])." ".($row['TITEL2']);
                        echo "</td><td class='anzeige'>";
                        echo ($row['GEB_DATUM']);
                        echo "</td><td class='anzeige'>";
                        echo ($row['EMAIL']);
                        echo "</td class='anzeige'></tr><tr>";
                  } 
                  $i++;

              echo "</tr></table>";
          }

          suche_geburtstag($datum_anfang, $datum_ende);

      ?>
      --> das ist der Code meines "Test-Scriptes", hab zuviele Ausgaben (echos) drauf, ich weiß, aber das hat den Zweck, dass ich den Überblick behalte und die kommen dann eh weg, wenn das ganze mal funktioniert und ins richtige Script eingebaut wird.

      Kommentar


      • #4
        Hat keiner eine Ahnung, wo der Fehler liegt?

        Das Ergebnis dieser Abfrage (siehe Post oben) ist eine sortierte Liste ALLER Datensätze die vorhanden sind, egal ob da ein Geburtsdatum angegeben wurde oder nicht.

        Was aber wirklich ausgegeben werden sollte, ist eine Liste aller Datensätze die ZWISCHEN den beiden Datumsangaben liegen.

        Weiß jemand wie ich das erreichen kann?

        Kommentar


        • #5
          Code:
             $mysql = "SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm,
                   DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('$datum_anfang',1,4),SUBSTRING('$datum_ende',5,6))
                   BETWEEN '$datum_anfang' AND '$datum_ende' ORDER BY gebm, gebd";
          
                   echo $mysql;   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ???
          Zeige doch mal bitte, was dieses >>> echo $mysql; <<< ausgibt!

          ~dilemma~

          Kommentar


          • #6
            echo $mysql gibt das hier aus:

            Code:
            SELECT IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL FROM vkstamm WHERE CONCAT(SUBSTRING('0000.06.26',1,4),SUBSTRING('5000.12.31',5,6)) BETWEEN '0000.06.26' AND '5000.12.31' ORDER BY gebm, gebd
            --> es werden dann ALLE Datensätze angezeigt.
            --> es sollen aber nur die Datensätze angezeigt werden die zwischen 26.06 und 31.12 liegen

            Kommentar


            • #7
              Naja, dann schätze ich mal, dass
              '0000.12.31' zwischen '0000.06.26' und '5000.12.31' liegt.

              Kommentar


              • #8
                also,
                dieses:
                >>>>>>>> CONCAT(SUBSTRING('0000.06.26',1,4),SUBSTRING('5000 .12.31',5,6))
                liefert:
                >>>>>>>> '0000.12.31' <<<<<<<<<

                Und:
                >>>>>>>> '0000.12.31' <<<<<<<<< ist doch BETWEEN '0000.06.26' AND '5000.12.31' !!!

                also erhälst du immer alle Datensätze!

                ~dilemma~

                Kommentar


                • #9
                  Ich weiß schon, dass alle Daten zwischen dem Jahr 0000 und und dem Jahr 5000 liegen.

                  Aber wie kann ich erreichen, dass die Jahreszahlen bei der Abrfrage sozusagen "ignoriert" werden (damit keine Jahreszahl ausgeschlossen wird, hab ich ja 0000 und 5000 gewählt)?

                  --> Ich suche ja nach Geburtstagen, und die finden ja jedes Jahr statt.

                  --> warum werden eigentlich auch die Datensätze angezeigt, bei denen kein Geburtsdatum drin steht?

                  Kommentar


                  • #10
                    Wenn schon umständlich, dann so:
                    Code:
                    SELECT
                       IDENT, FAMNAME, VORNAME, TITEL2, NAME2A, GEB_DATUM, MONTH(GEB_DATUM) AS gebm, DAYOFMONTH(GEB_DATUM) AS gebd, EMAIL
                    FROM
                       vkstamm
                    WHERE
                       DATE_FORMAT(GEB_DATUM, '%m.%d') BETWEEN RIGHT('$datum_anfang',5) AND RIGHT($datum_ende,5)
                    /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
                    ORDER BY gebm, gebd
                    ~dilemma~

                    Kommentar


                    • #11
                      DANKE!!!

                      --> $datum_ende muss aber auch noch unter Hochkomma stehen
                      Code:
                      ...
                      DATE_FORMAT(GEB_DATUM, '%m.%d') BETWEEN RIGHT('$datum_anfang',5) AND RIGHT('$datum_ende',5)
                      ...
                      Warum umständlich, geht das noch einfacher?

                      Kommentar

                      Lädt...
                      X