Claudia: Status umschreiben

Hallo,

ich komme an einer kleinen Stelle nicht weiter, mein Code sieht bis jetzt so aus:

  
  
$editId = (int) @$_REQUEST['edit'];  
  
$abfrage = "SELECT * FROM `schienen` INNER JOIN `beschreibung`  
ON schienen.status = beschreibung.ver  
WHERE id = $editId";  
  $ergebnis = mysql_query($abfrage);  
  $row = mysql_fetch_object($ergebnis);  
  
  
if (!empty($_POST))  
{  
  
	$status 	= sqlPrepare($_POST['status']);  
    $kwe 		= sqlPrepare($_POST['kwe']);  
  
if (0 < $editId)  
    {  
    $sql = "  
    UPDATE `schienen`  
    SET  
       `status`  = '$status'  
      ,`kwe`  = '$kwe'  
  
    WHERE   id = $editId  
    ";  

Dann lasse ich eine eMail verschicken, da sieht ein Teil so aus:

  
'betreff'  => 'geändert in Status ' . $_POST['status'].' || '. $row->titel ,  

so in $_POST['status'] steht nun z.B. Status 1 so damit kann jemand anderes nichts anfangen. In meiner Tabelle "beschreibung" habe ich die Zahlen umgeschrieben, das sieht so aus:

  
CREATE TABLE IF NOT EXISTS `beschreibung` (  
  `ver` text NOT NULL,  
  `ni` text NOT NULL,  
  `bild` text NOT NULL  
) ENGINE=MyISAM DEFAULT CHARSET=latin1;  
  
--  
-- Daten für Tabelle `beschreibung`  
--  
  
INSERT INTO `beschreibung` (`ver`, `ni`, `bild`) VALUES  
('1', 'Verfügbar', '/media/ampel/gruen.png'),  
('2', 'Lieferung erflogt in KW', '/media/ampel/orange.png'),  
('3', 'Lieferung ungewiss', '/media/ampel/ampel.png');  

das Tabelle rufe ich ja oben schon ob. Aber wie kann ich jetzt die 1 zum Beispiel in Verfügabar bei der Ausgabe umschreiben. Hier komme ich einfach nicht weiter. Hat einer eine Idee?

  1. Hello,

    das Tabelle rufe ich ja oben schon ob. Aber wie kann ich jetzt die 1 zum Beispiel in Verfügabar bei der Ausgabe umschreiben. Hier komme ich einfach nicht weiter. Hat einer eine Idee?

    Wenn es denn unbedingt Just in Time sein muss, den Wert zu übersetzen, dann schreibe Dir eine Funktion dafür, die dies übernimmt.

    database_get_status_text($con, $stat_id)
      {
          ## abfrage auf die Tabelle durchführen

    ## und bei Erfolg Ergebnis zurückgeben

    return $statustext;

    ## sonst Logbucheintrag anlegen und

    return false;
      }

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Moin!

      das Tabelle rufe ich ja oben schon ob. Aber wie kann ich jetzt die 1 zum Beispiel in Verfügabar bei der Ausgabe umschreiben. Hier komme ich einfach nicht weiter. Hat einer eine Idee?

      Wenn es denn unbedingt Just in Time sein muss, den Wert zu übersetzen, dann schreibe Dir eine Funktion dafür, die dies übernimmt.

      Nö, das ist jetzt nicht dein Ernst, oder?

      JOIN bei der DB-Abfrage, und schon wandert der Umschreibungstext für alle Status problemlos in das Abfrageergebnis.

      Stattdessen malträtierst du die Datenbank lieber mit einer weiteren Abfrage pro Ergebniszeile, nur um den Text rauszufinden?

      Hatte ich schon mal das Wort "beängstigend" verwendet? Ach ja - hier ist es leider wieder angebracht. Zum Glück ist dein Code mehrheitlich nur Kommentar, aber er suggeriert leider total das Falsche.

      - Sven Rautenberg

      1. Hallo Sven,

        JOIN bei der DB-Abfrage, und schon wandert der Umschreibungstext für alle Status problemlos in das Abfrageergebnis.

        Hmm die habe ich aber doch oben drin ? Oder wende ich die unten dann falsch an? Denn bei mir steht immer noch Status 2 bzw. 1 und das ist eben nicht das was ich brauch.

        Gruß,
        Claudia

        1. Hello Claudia,

          entschuldige bitte, wenn ich das nicht gesehen habe...

          Fachlich hat Sven wohl Recht, menschlich hat er sich leider zum Negativev entwickelt.
          Du kannst alle erforderlichen Daten gleich in einer Anfrage ermitteln kannst. Allerdings ist mir Deine Abfrage auch noch noch nicht ganz klar

          ich hätte das dann so versucht:

          $abfrage =
              "SELECT * FROM schienen,       -- den * hätte ich vermutlich versucht, zu vermeiden
               beschreibung.ni as beschreibung
               INNER JOIN beschreibung
               ON schienen.status = beschreibung.ver
               WHERE schienen.id = $editId";

          dann steht nachher in Deinem $row->beschreibung die Übersetzung des Status.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hello,

            [...]
            was noch falsch war ...

            mit implizitem Join funktioniert es bei MySQL auch so:

            SELECT a.*, b.ni FROM schienen a, beschreibung b
                 where a.status = b.ver
                 and a.id = 2;

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hallo Tom,

              was noch falsch war ...

              warum bringst Du jetzt einen völlig überflüssigen

              mit implizitem Join funktioniert es bei MySQL auch so:

              impliziten Join ins Spiel. Claudia verwendete einen expliziten Join. Das ist die wesentlich bessere Lösung. Die Abfrage läßt sich auch mit * problemlos ohne impliziten Join schreiben, was wesentlich lesbarer ist.

              SELECT  
                  s.*,  
                  b.ni status_lang       -- AS ist optional, ich lasse es lieber weg.  
              FROM  
                  schienen s             -- Aliasnamen für Tabellen sorgen für  
                                         -- übersichtlichere Join- und WHERE-Klauseln  
              INNER JOIN  
                  beschreibung b  
              ON  
                  s.status = b.ver  
              WHERE  
                  s.id = <irgendeinwert>  
              
              

              Claudias Tabellenbezeichner erscheinen mir verbesserbar, ihre Spaltennamen ebenfalls, ihre Behandlung der Eingabewerte für den SQL-Kontext möchte ich als originell - daher unbedingt kommentierungswürdig - bezeichnen. Ich lege ihr den Artikel Kontextwechsel erkennen und behandeln von dedlfix ans Herz.

              Freundliche Grüße

              Vinzenz

      2. Hello,

        Hatte ich schon mal das Wort "beängstigend" verwendet? Ach ja - hier ist es leider wieder angebracht. Zum Glück ist dein Code mehrheitlich nur Kommentar, aber er suggeriert leider total das Falsche.

        Übertreib es nicht, auch wenn man Dich für das Mobbing gut bezahlen sollte!
        Irgendwann bist Du dann nämlich selbst dran.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi,

          Hatte ich schon mal das Wort "beängstigend" verwendet? Ach ja - hier ist es leider wieder angebracht. Zum Glück ist dein Code mehrheitlich nur Kommentar, aber er suggeriert leider total das Falsche.

          Übertreib es nicht, auch wenn man Dich für das Mobbing gut bezahlen sollte!

          Nun komm doch mal wieder von deinem Alle-gegen-mich-Trip herunter, und sieh einfach ein, dass du mit den Antworten in der letzten Zeit, auf die Sven in dieser Weise geantwortet hat, einfach ein bisschen über's Ziel hinausgeschossen bist und dem Frager etwas geantwortet hast, was die Sache weitaus komplizierter macht, als notwendig.
          Dass du das kannst und auch solche Lösungswege für komplexere Probleme im Repertoir hast, ist ja schön und gut - aber man muss sie nicht immer auftischen, wenn's auch sehr viel simpler geht.

          MfG ChrisB

          --
          Light travels faster than sound - that's why most people appear bright until you hear them speak.
          1. Hallo Tom,

            Hatte ich schon mal das Wort "beängstigend" verwendet? Ach ja - hier ist es leider wieder angebracht. Zum Glück ist dein Code mehrheitlich nur Kommentar, aber er suggeriert leider total das Falsche.

            Übertreib es nicht, auch wenn man Dich für das Mobbing gut bezahlen sollte!

            Nun komm doch mal wieder von deinem Alle-gegen-mich-Trip herunter...

            Jep, Tom. ^^
            Abgesehen davon hab Dich nicht so! Es sind immer noch Nachwehen des Vollmonds, worunter sich auch Deine Drohung wohlgesonnen subsumieren lässt. ;)

            Gruß aus Berlin!
            eddi

        2. Moin!

          Hello,

          Hatte ich schon mal das Wort "beängstigend" verwendet? Ach ja - hier ist es leider wieder angebracht. Zum Glück ist dein Code mehrheitlich nur Kommentar, aber er suggeriert leider total das Falsche.

          Übertreib es nicht, auch wenn man Dich für das Mobbing gut bezahlen sollte!
          Irgendwann bist Du dann nämlich selbst dran.

          Tom, das Problem, was ich im Moment sehe ist, dass du früher mal brauchbare Antworten mit über dem Durchschnitt liegender Qualität geliefert hast, das Niveau aber im Moment deutlich spürbar gesunken ist. Und das finde ich schon irgendwie beängstigend, weil auch dein Nick hier im Forum eine gewisse Signalwirkung hat, unter dem man sich gewisse Postingqualität erwartet, die aber im Moment leider nicht geliefert wird. Das ist schade.

          Nicht dass ich hier irgendeinen durchsetzbaren Anspruch auf Qualität fingieren will, ganz und gar nicht. Jeder darf hier so gut oder schlecht posten, wie er will. Aber schlechte technische Lösungen werden halt auch entsprechend kommentiert. Damit wirst du leben müssen.

          - Sven Rautenberg

          1. Hello,

            Tom, das Problem, was ich im Moment sehe ist, dass du früher mal brauchbare Antworten mit über dem Durchschnitt liegender Qualität geliefert hast, das Niveau aber im Moment deutlich spürbar gesunken ist. Und das finde ich schon irgendwie beängstigend, weil auch dein Nick hier im Forum eine gewisse Signalwirkung hat, unter dem man sich gewisse Postingqualität erwartet, die aber im Moment leider nicht geliefert wird. Das ist schade.

            Dann wir es wohl doch Alzheimer sein oder Toxoplasmose? Aber letzteres haben ja immerhin 50-80% der Europäer, ganz voran die Franzosen. Aber vielleicht bin ich auch einfach nur unterhopft? Dann müsste ich meinen Konsum an Weißbier nur wieder auf das "Normalmaß" steigern. Aber eigentlich wollte ich abnehmen.

            Ber mal ernsthaft:

            Machen wir es doch _bitte_ so: Wenn Du feststellst, dass ich eine unbefriedingende, unvollständige oder fehlerhafte Antwort gegeben habe, dann kritisiere nicht (nur) die Person, sondern gezielt die Antwort. Stelle also eine bessere Lösung daneben, so wie Vinzenz das gemacht hat. https://forum.selfhtml.org/?t=191382&m=1276301.

            Ich habe genau gewusst, dass er sich melden wird, wenn ich den Join "wegrationalisiere" ;-)) Aber ER kann sachlich bleiben und sich auf die eigentliche Frage konzentrieren! DU kannst das auch.

            Das hilft dem Forum besser und führt mich dann auch eher auf den Weg der Erkenntnis zurück, als unterschwellige persönliche Angriffe. :-)

            Bist Du damit einverstanden?

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de