Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankabfrage die 2.

Einklappen

Neue Werbung 2019

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

  • Datenbankabfrage die 2.

    Hallo!
    Ist es eigentlich möglich bei einer SQLAbfrage dass ein Wert von einem anderen Eintrag (ID)übernommen werden kann?

    Also ich schreibe über ein Formular Daten in eine Datenbank.


    Code:
    $Insert = $DB->prepare("INSERT INTO `KSS`
       SET
        `maschinenbezeichung` = :maschinenbezeichung, 
    
        `letzter_ksstausch` = :letzter_ksstausch, 
     `kalenderwoche`= :kalenderwoche,
    `jahr`= :jahr
    
      ");
    Abgefragt wird dann folgendes:
    Code:
    // Abfrage Kalenderwoche und Jahr
    $result = mysql_query("SELECT * FROM KSS WHERE kalenderwoche = '$kalenderwoche' AND jahr = '$jahr'  ");
    Nun habe ich eine Tabelle erstellt:

    Code:
      <tbody>
            <?php while ($row = mysql_fetch_array($result, MYSQL_ASSOC)): ?>
                <tr>    
                    <td ALIGN="CENTER"><?php echo htmlspecialchars($row['maschinenbezeichung']); ?></td>
                   
                    <td ALIGN="CENTER"><?php echo htmlspecialchars($row['letzter_ksstausch']); ?></td>
    
                    <td ALIGN="CENTER"><?php echo htmlspecialchars($row['kalenderwoche']); ?></td>
                    <td ALIGN="CENTER"><?php echo htmlspecialchars($row['jahr']); ?></td>
                </tr>
            <?php endwhile; ?>
        </tbody>
    Kann ich nun in der Ausgabe auch einen Wert aus einem frühereren Eintrag anzeigen lassen?

    Also: Letzter KSS Tausch KW05/2015 hat den Eintrag: 0000-00-00
    Letzter KSS Tausch KW04/2015 hat den Eintrag: 2014-12-12

    Jetzt würde ich gerne in
    Code:
    $row['letzter_ksstausch']
    den Eintrag von KW4/2015 anzeigen lassen. Also immer das neuere Datum sozusagen.

    Ist dies so überhaupt möglich?
    http://www.krassevideos.net
    http://www.mein-neues-iphone.de
    http://www.webkatalog.es


  • #2
    Ich würde das mit einer IF-Abfrage machen, für den Fall das noch in der aktuellen KW ein KSS Tausch gemacht wurde, dann wäre der Wert ja nicht mehr 0000-00-00. Würde also wie gehabt den Wert abfragen und sobald der Wert eben 0 ist (also doch noch kein Tausch gemacht wurde), letzter_ksstausch aus der vorigen Kalenderwoche abfragen und stattdessen einfügen. Das funktioniert natürlich nur, wenn das wöchentlich geschieht, ansonsten wäre der nächste abgefragte Wert ja wieder 0, dann müsstest du den nächsten Wert absteigend auslesen lassen, der nicht 0 ist und nicht den der letzten Kalenderwoche.

    Kommentar


    • #3
      Kannst du die Struktur der Datenbank / benötigten Tabellen bisschen genauer beschreiben?
      Ist es eigentlich möglich bei einer SQLAbfrage dass ein Wert von einem anderen Eintrag (ID)übernommen werden kann?
      Was hat das (ID) zu bedeuten? Formulier die Frage mal eindeutig.


      Prinzipiell solltest du dir mit JOIN, NULLIF() und COALESCE() eine passende Query zusammenbauen können.
      Genauere Hilfe kann ich bei mehr Informationen bieten.
      Relax, you're doing fine.
      RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

      Kommentar


      • #4
        Nur so als Hinweis:

        Code:
        0000-00-00
        ist ein ungültiges Datum und wir (leider) von MySQL in der Standardeinstellung akzeptiert. Verwende doch bitte einen NULL-Wert, wenn du "kein Datum" signalisieren willst.
        GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

        Kommentar


        • #5
          Zitat von tonkelz Beitrag anzeigen
          Hallo!
          Ist es eigentlich möglich bei einer SQLAbfrage dass ein Wert von einem anderen Eintrag (ID)übernommen werden kann?

          Also ich schreibe über ein Formular Daten in eine Datenbank.


          Code:
          $Insert = $DB->prepare("INSERT INTO `KSS`
             SET
              `maschinenbezeichung` = :maschinenbezeichung, 
          
              `letzter_ksstausch` = :letzter_ksstausch, 
           `kalenderwoche`= :kalenderwoche,
          `jahr`= :jahr
          
            ");

          Was ist letzter_ksstausch ? vermutlich ein Datum, und kalenderwoche sowie jahr die aus dem Wert von letzter_ksstausch extrahierten Werte. Das ist redundant und damit falsch.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Zitat von Donevan2 Beitrag anzeigen
            Ich würde das mit einer IF-Abfrage machen, für den Fall das noch in der aktuellen KW ein KSS Tausch gemacht wurde, dann wäre der Wert ja nicht mehr 0000-00-00. Würde also wie gehabt den Wert abfragen und sobald der Wert eben 0 ist (also doch noch kein Tausch gemacht wurde), letzter_ksstausch aus der vorigen Kalenderwoche abfragen und stattdessen einfügen. Das funktioniert natürlich nur, wenn das wöchentlich geschieht, ansonsten wäre der nächste abgefragte Wert ja wieder 0, dann müsstest du den nächsten Wert absteigend auslesen lassen, der nicht 0 ist und nicht den der letzten Kalenderwoche.
            Also in der Tabelle ist es so: Feld--ksstausch, TYPE--date, Standard---NULL, NULL --Haken drin

            Hast Du da ein Beispiel vielleicht?

            Zitat von VPh Beitrag anzeigen
            Kannst du die Struktur der Datenbank / benötigten Tabellen bisschen genauer beschreiben?

            Was hat das (ID) zu bedeuten? Formulier die Frage mal eindeutig.
            ID ist die Nummer des fortlaufenden Eintrages. Jedem Eintrag muß ich ja eine ID zuweisen.
            id int(11) auto_increment




            Zitat von akretschmer Beitrag anzeigen
            Was ist letzter_ksstausch ? vermutlich ein Datum, und kalenderwoche sowie jahr die aus dem Wert von letzter_ksstausch extrahierten Werte. Das ist redundant und damit falsch.
            letzter_ksstausch date , kalenderwoche varchar(20),jahr varchar(10),
            http://www.krassevideos.net
            http://www.mein-neues-iphone.de
            http://www.webkatalog.es

            Kommentar


            • #7
              Zitat von tonkelz Beitrag anzeigen
              letzter_ksstausch date , kalenderwoche varchar(20),jahr varchar(10),
              Glückwunsch! Viel mehr geht nicht falsch zu machen, bist nah dran.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Zitat von akretschmer Beitrag anzeigen
                Glückwunsch! Viel mehr geht nicht falsch zu machen, bist nah dran.
                na dann wäre es nett wenn ich hierbei ein bisschen wenigstens aufgeklärt werde warum fast alles falsch sei.
                Ja ich weiß PHP/Mysql-Grundlagen.
                Dennoch hilft ein Denkanstoß weiter.
                Danke.
                http://www.krassevideos.net
                http://www.mein-neues-iphone.de
                http://www.webkatalog.es

                Kommentar


                • #9
                  Zitat von tonkelz Beitrag anzeigen
                  na dann wäre es nett wenn ich hierbei ein bisschen wenigstens aufgeklärt werde warum fast alles falsch sei.
                  Ja ich weiß PHP/Mysql-Grundlagen.
                  Dennoch hilft ein Denkanstoß weiter.
                  Danke.
                  #5, dazu: Datentypen.
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    Ich bezweifel das dein:

                    PHP-Code:
                    $Insert $DB->prepare("INSERT INTO `KSS`
                       SET
                        `maschinenbezeichung` = :maschinenbezeichung, 

                        `letzter_ksstausch` = :letzter_ksstausch, 
                     `kalenderwoche`= :kalenderwoche,
                    `jahr`= :jahr

                      "
                    ); 
                    INSERT INTO mit SET funktionieren würde weil normal schreibt man INSERT INTO tabelle (field) VALUES ($var)

                    Kommentar


                    • #11
                      Letzter versuch:

                      So zeigt er mir den letzten KSS Wechsel in der Tabelle an:

                      Code:
                      $sql = "select DATE_FORMAT(`letzter_ksstausch`, '%d.%m.%Y') AS `letzter_ksstausch` , maschinenbezeichung, Sollkonzentration_KSS_min, Sollkonzentration_KSS_max, istkonzentration_kss, 
                      phWert_min, phWert_max,KSSHersteller, KSSProdukt, phwert_aktuell, Grenzwert_Nitrit, nitritgehalt_aktuell,  temperatur, massnahmen, pruefer, kalenderwoche, jahr 
                                FROM KSS WHERE letzter_ksstausch > '0000-00-00'  ORDER BY maschinenbezeichung ASC  ";
                      So zeigt er mir den Eintrag aus der jeweiligen KW an:
                      Code:
                      $result = mysql_query("SELECT DATE_FORMAT(`letzter_ksstausch`, '%d.%m.%Y') AS `letzter_ksstausch`, maschinenbezeichung, Sollkonzentration_KSS_min, Sollkonzentration_KSS_max, istkonzentration_kss, 
                      phWert_min, phWert_max,KSSHersteller, KSSProdukt, phwert_aktuell, Grenzwert_Nitrit, nitritgehalt_aktuell,  temperatur, massnahmen, pruefer, kalenderwoche, jahr  
                      FROM KSS WHERE kalenderwoche = '$kalenderwoche' AND jahr = '$jahr'");

                      Wie kann er aber den letzten KSS Tausch in der Spalte anzeigen unabhängig der KW?
                      Gibt doch Max() usw.
                      Hat jemand eine Idee?
                      http://www.krassevideos.net
                      http://www.mein-neues-iphone.de
                      http://www.webkatalog.es

                      Kommentar


                      • #12
                        Zitat von VPh Beitrag anzeigen
                        Kannst du die Struktur der Datenbank / benötigten Tabellen bisschen genauer beschreiben?
                        ...
                        Prinzipiell solltest du dir mit JOIN, NULLIF() und COALESCE() eine passende Query zusammenbauen können.
                        Genauere Hilfe kann ich bei mehr Informationen bieten.
                        Weiß immer noch nicht wies bei dir aussieht.
                        http://sqlfiddle.com/ Hilft dabei

                        Mein Gedankengang dazu:
                        COALESCE() gibt den ersten Wert zurück, der nicht null ist.
                        - Kannst du als Parameter die Spalte aus dem FROM geben - der Wert des aktuellsten Datensatzes also - und als zweiten Parameter die Spalte aus der gejointen Tabelle
                        -> Sollte im aktuellen Datensatz null stehen, erhälst du den Wert aus dem vorherigen Datensatz
                        NULLIF(), kannst du die Spalte mitgeben und dann die Bedingung, wann die Funktion null zurückgeben soll.
                        - da du ja "0000-00-00" in der Spalte stehen hast, wenn kein Wert eingetragen ist, musst du das erst in null wandeln damit COALESCE nutzbar ist

                        Join auf die selbe Tabelle über die vorhandene ID (Oder du führst das gleich in einem Subselect aus, ist vielleicht besser weil du ja auch ne Sortierung für den altern Wert brauchst)
                        Im Select-Teil der Abfrage dann
                        Code:
                        SELECT COALESCE(NULLIF(FROM.Spaltenname, '0000-00-00'), gejointeTabelle.Spaltenname) AS letzter_ksstausch ...
                        Relax, you're doing fine.
                        RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                        Kommentar


                        • #13
                          Code:
                          Tabellenstruktur für Tabelle `KSS`
                          --
                          
                          CREATE TABLE IF NOT EXISTS `KSS` (
                            `maschinenbezeichung` varchar(100) NOT NULL,
                            `produktlinienleiter` varchar(20) NOT NULL,
                            `produktlinie` varchar(20) NOT NULL,
                            `maschinengruppe` varchar(20) NOT NULL,
                            `inventarnummer` varchar(20) NOT NULL,
                            `KSSHersteller` varchar(20) NOT NULL,
                            `KSSProdukt` varchar(20) NOT NULL,
                            `Fuellmenge` varchar(20) NOT NULL,
                            `Sollkonzentration_KSS_min` varchar(20) NOT NULL,
                            `Sollkonzentration_KSS_max` varchar(20) NOT NULL,
                            `phWert_min` varchar(20) NOT NULL,
                            `phWert_max` varchar(20) NOT NULL,
                            `Grenzwert_Nitrit` varchar(20) DEFAULT NULL,
                            `istkonzentration_kss` varchar(10) DEFAULT NULL,
                            `phwert_aktuell` varchar(10) DEFAULT NULL,
                            `nitritgehalt_aktuell` varchar(10) DEFAULT NULL,
                            `temperatur` varchar(20) DEFAULT NULL,
                            `letzter_ksstausch` date DEFAULT NULL,
                            `massnahmen` varchar(100) DEFAULT NULL,
                            `pruefer` varchar(20) DEFAULT NULL,
                            `kalenderwoche` varchar(20) DEFAULT NULL,
                            `id` int(11) NOT NULL AUTO_INCREMENT,
                            `jahr` varchar(10) DEFAULT NULL,
                            PRIMARY KEY (`id`)
                          ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=180 ;
                          http://www.krassevideos.net
                          http://www.mein-neues-iphone.de
                          http://www.webkatalog.es

                          Kommentar


                          • #14
                            Tjo, meinen Vorschlag ausprobiert?
                            Relax, you're doing fine.
                            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                            Kommentar


                            • #15
                              Zitat von VPh Beitrag anzeigen
                              Tjo, meinen Vorschlag ausprobiert?
                              Heute wahrscheinlich.
                              Danke mal bis hierhin
                              http://www.krassevideos.net
                              http://www.mein-neues-iphone.de
                              http://www.webkatalog.es

                              Kommentar

                              Lädt...
                              X