Announcement

Collapse
No announcement yet.

Select abfrage! Brauche dringend hilfe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Select abfrage! Brauche dringend hilfe

    Hallo Liebe Mitgleider,

    ich brauche mal wieder eure hilfe.

    Ich brauche eine SQL script. So sieht er jetzt aus.

    Ich brauche in aber in einem um die ausgabe sortieren zu lassen

    PHP Code:
    //Kundendaten
    $sql "SELECT * FROM tabelle_kundendaten where id='1'";
    $result=mysql_query($sql_ntermin$con);
    //nächster termin
    $sql_ntermin "SELECT date_format(datum,'%d-%m-%Y')AS datum1 FROM tabelle where datum>now() and id='1'";
    $result_ntermin=mysql_query($sql_ntermin$con);
    //letzter termin
    $sql_ltermin "SELECT date_format(datum,'%d-%m-%Y')AS datum1 FROM tabellel where datum<now() and id='1'";
    $result_ltermin=mysql_query($sql_ltermin$con); 
    Danke für eure hilfe oder lösungsbeispiele

  • #2
    Mittels JOIN
    http://www.sql-und-xml.de/sql-tutori...-mit-join.html
    Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

    Comment


    • #3
      danke für die antwort.

      Leider Verstehe ich nicht die denkweise von join...

      ich zerbreche mir schon seit einiger zeit den Kopf darüber aber ich kommt nicht dahinter wie join funktionert.

      wo sind die weiteren bedingungen?

      so ist meine denkweise
      z.B.
      "SELECT (datum von der tabelle welches kleiner ist als jetzt) as datum1, (datum von der tabelle welches größer ist als jetzt)as datum2, * from so und jetzt habe ich keinder ahnung mehr ORDER BY $_POST[sortier art]";

      Comment


      • #4
        Gib mal ein Auszug aus deinen Tabellen und dazu das gewünschte Ergebnis in tabellarischer Form.
        Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

        Comment


        • #5
          OK die Tabellen in der Datenbank

          Code:
          CREATE TABLE `pupils` (
            `learner_id` int(5) unsigned zerofill NOT NULL,
            `learner_applicationstate` varchar(111) collate latin1_german2_ci NOT NULL default 'active',
            `learner_drivingschool_id` varchar(5) collate latin1_german2_ci NOT NULL,
            `learner_class1` varchar(5) collate latin1_german2_ci NOT NULL,
            `learner_class2` varchar(5) collate latin1_german2_ci NOT NULL,
            `learner_class3` varchar(5) collate latin1_german2_ci NOT NULL,
            `learner_class4` varchar(5) collate latin1_german2_ci NOT NULL,
            `learner_issue` varchar(5) collate latin1_german2_ci NOT NULL,
            `learner_bF17` varchar(5) collate latin1_german2_ci NOT NULL,
            `learner_pricecode` varchar(20) collate latin1_german2_ci NOT NULL,
            `learner_applicationdate` date NOT NULL,
            `learner_surname` varchar(250) collate latin1_german2_ci NOT NULL,
            `learner_firstname1` varchar(250) collate latin1_german2_ci NOT NULL,
            `learner_firstname2` varchar(250) collate latin1_german2_ci NOT NULL,
            `learner_titel` varchar(250) collate latin1_german2_ci NOT NULL,
            `learner_street` varchar(250) collate latin1_german2_ci NOT NULL,
            `learner_postcode` varchar(250) collate latin1_german2_ci NOT NULL,
            `learner_city` varchar(250) collate latin1_german2_ci NOT NULL
            PRIMARY KEY  (`learner_id`),
            FULLTEXT KEY `learner_surname` (`learner_surname`,`learner_firstname1`,`learner_firstname2`)
          ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
          Code:
          CREATE TABLE `timetable_practical` (
            `teaching_date` datetime NOT NULL,
            `teaching_teacherid` varchar(5) collate latin1_german2_ci NOT NULL,
            `teaching_pupilid` int(5) unsigned zerofill NOT NULL,
            `teaching_pickup` int(111) NOT NULL,
            `teaching_kind` varchar(50) collate latin1_german2_ci NOT NULL,
            `teaching_theorysubject` varchar(50) collate latin1_german2_ci NOT NULL,
            `teaching_txt` varchar(254) collate latin1_german2_ci NOT NULL,
            `teaching_state` varchar(20) collate latin1_german2_ci NOT NULL,
            `teaching_duration` varchar(111) collate latin1_german2_ci NOT NULL,
            UNIQUE KEY `teaching_date` (`teaching_date`,`teaching_teacherid`)
          ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
          das sind die beiden Tabellen

          mein code jetzt



          Code:
          <table border="0" cellpadding="3" cellspacing="0" >
          <?php
          $sql = "SELECT * FROM pupils where learner_applicationstate='active' ORDER BY $sort ASC";
          $result=mysql_query($sql, $con);
          if(mysql_num_rows($result)>0)
          {
          for($i=0;$i<mysql_num_rows($result);$i++)
          {
          $sql_ntermin = "SELECT date_format(teaching_date,'%d-%m-%Y')AS teaching_date2 FROM timetable_practical where teaching_date>now() and teaching_pupilid='".mysql_result($result,$i, 'learner_id')."'";
          $result_ntermin=mysql_query($sql_ntermin, $con);
          $sql_ltermin = "SELECT date_format(teaching_date,'%d-%m-%Y')AS teaching_date2 FROM timetable_practical where teaching_date<now() and teaching_pupilid='".mysql_result($result,$i, 'learner_id')."'";
          $result_ltermin=mysql_query($sql_ltermin, $con);
          
          $checked = ($i == 0) ? "checked" : "";
          $bgcolor = ($bgcolor == '#C0C0C0') ? '#A8A8A8' : '#C0C0C0';
          $learner_id = mysql_result($result,$i, 'learner_id');
          $learner_class_arr[1] = mysql_result($result,$i, 'learner_class1');
          $learner_class_arr[2] = (mysql_result($result,$i, 'learner_class2') != 'FALSE') ? ' | '.mysql_result($result,$i, 'learner_class2') : '';
          $learner_class_arr[3] = (mysql_result($result,$i, 'learner_class3') != 'FALSE') ? ' | '.mysql_result($result,$i, 'learner_class3') : '';
          $learner_class_arr[4] = (mysql_result($result,$i, 'learner_class4') != 'FALSE') ? ' | '.mysql_result($result,$i, 'learner_class4') : '';
          $learner_class = implode("", $learner_class_arr);
          $learner_kind = (mysql_result($result,$i,'learner_pricecode') == 'rackfsm_norm') ? 'Normalkurs' : 'Schnellkurs';
          
          echo "
          <tr>
          <td align='left' style='font-size: 11px;' bgcolor='$bgcolor' width='30'><input type='radio' name='chk' value='$learner_id ' onClick='auswahl()' $checked></td>
          <td align='left' style='font-size: 11px;' bgcolor='$bgcolor' width='30'><input type='checkbox' name='archiv[]' value='$learner_id'></td>
          <td align='left' style='font-size: 11px;' bgcolor='$bgcolor' width='250'>".mysql_result($result,$i, 'learner_surname').", ".mysql_result($result,$i, 'learner_firstname1')."</td>
          <td align='left' style='font-size: 11px;' bgcolor='$bgcolor' width='50'>$learner_id</td>
          <td align='left' style='font-size: 11px;' bgcolor='$bgcolor' width='50'>$learner_class</td>
          <td align='left' style='font-size: 11px;' bgcolor='$bgcolor' width='100'>$learner_kind</td>
          <td align='left' style='font-size: 11px;' bgcolor='$bgcolor' width='100'>".mysql_result($result_ltermin,0, 'teaching_date2')."</td>
          <td align='left' style='font-size: 11px;' bgcolor='$bgcolor' width='100'>".mysql_result($result_ntermin,0, 'teaching_date2')."</td>
          </tr>
          ";
          }
          }
          ?>
          </table>
          aussehen soll es so
          HTML Code:
          <table border="0" cellpadding="3" cellspacing="0" >
          <tr class='header_liste' background="bg.gif">
          <td align="left" width="30"><img src="../IMAGES/success.png"></td>
          <td align="left" width="30"><img src="../IMAGES/archiv.gif" width="16" height="16"></td>
          <td align="left" width="250">Name <a href="?page=fs_moehle_manager_pupil&sort=learner_surname"><img border="0" src="../IMAGES/ud5.gif"></a></td>
          <td align="left" width="50">Kartei <a href="?sort=learner_id"><img border="0" src="../IMAGES/ud5.gif"></a></td>
          <td align="left" width="50">Klasse <a href="?sort=learner_class1 "><img border="0" src="../IMAGES/ud5.gif"></a></td>
          <td align="left" width="100">Ausbildungsart <a href="?sort=learner_pricecode"><img border="0" src="../IMAGES/ud5.gif"></a></td>
          <td align="left" width="100">Letzter Termin </td>//Würde die auch gerne sortieren
          <td align="left" width="100">Nächster Termin </td>//Würde die auch gerne sortieren
          </tr>
          </table>
          Sortieren nach der nachname, id, klasse, ausbildungsart geht nur nach letzter termin und nächster termin nicht

          Comment


          • #6
            PHP/HTML Code nutzt mir nichts.
            Ich wollte ein Auszug deiner Eingangstabellen und deiner erwarteten Ergebnistabelle, wie du diese auch mittels PMA o.ä. angezeigt bekommst.

            Edit: nur die relevanten Spalten.
            Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

            Comment


            • #7
              was meinst du mit eingangstabellen?

              Also es wird alles richtig ausgegeben nur ich kann nicht sortieren....

              ergebniss soll sein

              id|name|klasse|art|letztestunde|nächstestunde

              Comment


              • #8
                ca. 10 Datensätze aus deinen Tabellen und daraus das resultierende Ergebnis
                Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

                Comment


                • #9
                  Ich weis nicht ob wir nicht aneinander vorbei reden

                  Also so soll es sein

                  id|name|klasse|art|letztestunde|nächstestunde
                  1|test1|B|Schnell|2010-02-01|2010-02-16
                  2|test2|A1|Schnell|2010-02-02|2010-02-16
                  3|test2|D|Normal|2010-02-03|2010-02-15
                  4|test3|CE|Schnell|2010-02-02|2010-02-18
                  5|test4|C|Schnell|2010-02-05|2010-02-12
                  6|test5|AB|Schnell|2010-02-03|2010-02-16
                  7|test6|AU|Schnell|2010-02-04|2010-02-14

                  Tabelle Kunden
                  id|name|klasse|art
                  1|test1|B|Schnell
                  2|test2|A1|Schnell
                  3|test2|D|Normal
                  4|test3|CE|Schnell
                  5|test4|C|Schnell
                  6|test5|AB|Schnell
                  7|test6|AU|Schnell

                  tabelle practical

                  termine|kundenid vergangheit und zukunft
                  2010-02-01|1
                  2010-02-01|2
                  2010-02-01|3
                  2010-02-04|4
                  2010-02-03|5
                  2010-02-02|6
                  2010-02-06|3
                  2010-02-06|2
                  2010-02-06|1
                  2010-02-21|1
                  2010-02-21|2
                  2010-02-21|3
                  2010-02-24|4
                  2010-02-23|5
                  2010-02-22|6
                  2010-02-26|3
                  2010-02-26|2
                  2010-02-26|1

                  Comment


                  • #10
                    hilft dir das?

                    Comment


                    • #11
                      Ok
                      als erstes ermitteln wir die letzte Stunde der einzelnen Ids
                      Code:
                          
                          SELECT b.kid, b.termin
                          FROM pract b
                          WHERE termin = (
                              SELECT MAX(termin)
                              FROM pract d
                              WHERE termin < now()
                              AND kid = b.kid
                          )
                      als nächstes ermitteln wir die kommende Stunde
                      Code:
                          SELECT c.kid, c.termin
                          FROM pract c
                          WHERE termin = (
                              SELECT MIN(termin)
                              FROM pract d
                              WHERE termin > now()
                              AND kid = c.kid
                          )
                      Beide Abfragen werden jetzt mit der Kundentabelle verknüpft
                      Code:
                      SELECT a.id, a.name, a.klasse, b.termin letztestunde, c.termin nächstestunde
                      FROM kunden a
                      JOIN (
                          SELECT b.kid, b.termin
                          FROM pract b
                          WHERE termin = (
                              SELECT MAX(termin)
                              FROM pract d
                              WHERE termin < now()
                              AND kid = b.kid
                          )
                      ) b
                          ON a.id = b.kid
                      JOIN (
                          SELECT c.kid, c.termin
                          FROM pract c
                          WHERE termin = (
                              SELECT MIN(termin)
                              FROM pract d
                              WHERE termin > now()
                              AND kid = c.kid
                          )
                      ) c
                          ON a.id = c.kid
                      Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

                      Comment


                      • #12
                        danke genau das habe ich gesucht!!!

                        Ich werde das gleich einmal ausprobieren.

                        Comment


                        • #13
                          Aus Gründen der Fairness solltest du im anderen Forum erwähnen, dass dir eine Lösung gegeben wurde.
                          Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

                          Comment


                          • #14
                            ...der Fairness halber hier mE eine effizientere Alternative:

                            Code:
                            SELECT a.id, a.name, a.klasse,
                            (SELECT b.termin
                                FROM pract b
                                WHERE b.termin < NOW() AND a.kid = b.kid
                                ORDER BY b.termin DESC
                                LIMIT 1) AS LetzteStunde,
                            (SELECT c.termin
                                FROM pract c
                                WHERE c.termin > NOW() AND a.kid = c.kid
                                ORDER BY c.termin ASC
                                LIMIT 1) AS NächsteStunde
                            FROM kunden a

                            Comment

                            Working...
                            X