Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlerhafte Abfrage ?

Einklappen

Neue Werbung 2019

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

  • Fehlerhafte Abfrage ?

    Hallo,

    ich will für verschiedene Artikel jeweils den Objektnamen aus der DB auslesen.

    Bisher hatte ich diese Abfrage in jeder Datei, die den Objektnamen benötigte. Das heisst, bei einer Änderung bin ich stundenlang damit beschäftigt, die Änderung in jeder einzelnen Datei vorzunehmen.

    Deshalb möchte ich diese DB-Abfrage in eine objekt.inc.php stecken, und in der entsprechenden Datei nur includen und per "echo $objekt;" ausgeben lassen.

    Ist es denn grundsätzlich möglich, diese Abfrage in einer .inc.php auszuführen, und diese Datei dann bei jeder anderen Datei, die die Objektart benötigt, zu includen ?

    Die Abfrage in der objekt.inc.php sieht so aus:


    Code:
    $query="SELECT objekt FROM i_auctions"; 
    $result=mysql_query($query); 
    while($row=mysql_fetch_array($result, MYSQL_ASSOC)) 
    
    switch ($objekt) 
    { 
        case 0: 
           $objekt = "Einfamilienhaus"; 
           break; 
        case 1: 
           $objekt = "Zweifamilienhaus"; 
           break; 
        case 2: 
           $objekt = "Reihenhaus"; 
           break; 
         ... 
         ...
    Ist diese Abfrage so richtig ?

    In jede ausgebende Datei include ich dann nur die objekt.inc.php .

    Geht das ?

  • #2
    Das ist grundsätzlich schon möglich. Allerdings ist in deinem Beispiel $objekt (in switch) nicht definiert. Ich denke es muss "$row['objekt']" heissen. Und wenn du dann "echo $objekt" aufrufst, gibst du nur das Objekt des letzten Datensatzes aus - und ich bezweifle, ob das beabsichtigt ist. Ausserdem würde ich das ganze in eine Funktion packen, aber das ist Ansichtssache.
    Gruss
    L

    Kommentar


    • #3
      Ich denke es muss "$row['objekt']" heissen.
      ok, sieht jetzt wie folgt aus:


      Code:
      $query="SELECT objekt FROM i_auctions";
      $result=mysql_query($query);
      while($row=mysql_fetch_array($result, MYSQL_ASSOC))
      
        switch ($objekt) {
            case 0:
              $row['objekt'] = "Einfamilienhaus";
              break;
            case 1:
              $row['objekt'] = "Zweifamilienhaus";
              break;
      ...

      Und wenn du dann "echo $objekt" aufrufst, gibst du nur das Objekt des letzten Datensatzes aus - und ich bezweifle, ob das beabsichtigt ist.
      Das ist nicht beabsichtigt. Es soll für jedes Objekt der Objektname zugewiesen werden. In der DB stehen Ziffern, und diese Ziffern werden ausgelesen und sollen dann in den Objektnamen umgewandelt werden (und auch ausgegeben werden)...

      Kommentar


      • #4
        Die Korrektur war jetzt genau am falschen Ort. Und wenn du alle ausgeben willst machs doch gleich:
        Code:
        $query="SELECT objekt FROM i_auctions";
        $result=mysql_query($query) or die(mysql_error());
        while($row=mysql_fetch_array($result, MYSQL_ASSOC))
        {
          switch ($row['objekt']) 
          {
              case 0:
                echo "Einfamilienhaus";
                break;
              case 1:
                echo "Zweifamilienhaus";
                break;
              ....
           }
        }
        Gruss
        L

        Kommentar


        • #5
          Nochmal:

          In der DB stehen Ziffern, jede Ziffer steht für ein Objekt.

          Z.B.
          1= Einfamilienhaus
          2= 2fam.-haus
          3= Penthouse etc.

          Ich habe jetzt verschiedene Listen, unter anderem meistbesuchte Auktionen. Die Objektnamen dieser Auktionen will ich zuweisen:

          Zuerst lese ich die Zahlen der db aus, und jetzt will ich den einzelknen Zahlen den Objektnamen zuweisen.

          Beispiel:

          4 in 00000 Musterstadt
          wird zu
          Ferienimmobilie in 00000 Musterstadt

          1 in 00000 Musterstadt
          wird zu
          Einfamilienhaus in 00000 Musterstadt

          12 in 00000 Musterstadt
          wird zu
          Gewerbeimmobilie in 00000 Musterstadt

          etc.

          Die Abfrage (select etc) erfolgt in der objekt.inc.php

          Die Ausgabe in einer externen Datei, in welche die objekt.inc.php includet wird.

          Daher darf die Ausgabe (echo "Einfamilienhaus"; ) nicht in der objekt.inc.php stehen.

          EDIT:

          Hab das mal folgendermassen probiert:


          Code:
          $query="SELECT objekt FROM i_auctions";
          $result=mysql_query($query);
          while($row=mysql_fetch_array($result, MYSQL_ASSOC))
          
            switch ($row['objekt']) {
                case 0:
                  $objekt = "Einfamilienhaus";
                  break;
                case 1:
                  $objekt = "Zweifamilienhaus";
                  break;
          ...
          ...
          und erhalte als Ausgabe für JEDES Objekt: Baugrundstück (27), obwohl die Abfrage in der DB 11 ergibt (= Penthouse)....

          Kommentar


          • #6
            Wenn du in der DB nur die Zahlen hast, dann verstehe ich nicht, wozu die gut sein soll. Falls sie aber Ziffern und Objekte enthält, so musst du die Anfrage ändern. Ausserdem würde ich nochmals vorschlagen, eine Funktion zu erstellen:
            Code:
            function get_object($o_nr);
                query="SELECT objekt FROM i_auctions where nr = $o_nr";
                $result=mysql_query($query) or die(mysql_error()); 
                $row = mysql_fetch_object($result);
                return($row->object);
            }
            diese Funktion plazierst du in objekt.inc.php. und im Script kannst du dann z.B. direkt
            Code:
            echo get_object(4) . ' in 00000 Musterstadt
            ';
            ausgeben.
            Es stellt sich allerdings die Frage, ob es sich lohnt, für so etwas die DB zu bemühen. So wenige Objekte könnte man auch gleich aus einem Array holen. Aber das ist wiederum Ansichtssache.
            Gruss
            L

            Kommentar


            • #7
              In der Datenbank stehen Objektnummern. Bevor ich in jeder Datei, die den Objektnamen benötigt, eine ellenlange if-Abfrage reinsetze (und das sind ca. 30 Dateien), will ich das per .inc.php machen, die dann nur includet wird.

              Der eine sagte if-elseif, der andere array, der nächste switch, der nächste wieder array...

              Ich suche doch nur ne Lösung, dass nicht jedes Objekt dauernd gleich heisst, obwohl es unterschiedliche Ziffern sind !



              echo get_object(4).....
              Wofür steht die 4 ?

              Kommentar


              • #8
                Die 4 ist genau deine Zahl. Wenn du in deiner i_auctions-Tabelle die Daten in der folgenden Form hast:
                • nr | objekt
                  --------------
                  0 | Einfamilienhaus
                  1 | Zweifamilienhaus
                  2 | Penthouse
                  3 | Gewerbehaus
                  4 | Ferienhaus
                  ....
                hast, wirst du als Resultat "Ferienhaus" erhalten. Natürlich kannst du die Funktion auch in der Art
                Code:
                function get_object($o_nr);
                    $object = array( 'Einfamilienhaus', 'Zweifamilienhaus', 'Penthouse',  'Gewerbehaus', 'Ferienhaus', ...);
                    return($object[$o_nr]);
                }
                implementieren und das Resultat wird das gleiche sein.
                Gruss
                L

                Kommentar


                • #9
                  Die Objektnamen stehen nicht in der DB, deshalb brauche ich ja die objekt.inc.php, damit z.B. aus der Ausgabe 4 = Ferienimmobilie wird.

                  ich versteh das nicht dass das so umständlich ist, ich will doch nur die Objektnummern aus der DB auslesen und umwandeln in Objektnamen....und welche Nummer welchzen Objektnamen bedeutet, soll in der objekt.inc.php stehen, die ich dann nur noch includieren brauche.....


                  SELECT objekt FROM i_auctions

                  Wenn objekt = 1, dann objekt = Einfamilienhaus.
                  Wenn objekt = 2, dann 2familien-haus etc. usw.

                  Haben wir das erste objekt, geht es weiter mit dem nächsten....

                  Kommentar


                  • #10
                    Dann mach das halt so. Ich begreife nur nicht, was du damit erreichen willst. Ich habe zwei Möglichkeiten gezeigt, die das, was du willst machen. Aber wenn du es anders willst OK.
                    Gruss
                    L

                    Kommentar


                    • #11
                      so:


                      objekt.inc.php:
                      Code:
                      $query="SELECT objekt FROM i_auctions";
                      $result=mysql_query($query);
                      while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
                      
                      function get_object($o_nr);
                          $object = array( 'Einfamilienhaus', 'Zweifamilienhaus'.....);

                      ausgebende Datei:
                      Code:
                      echo $objekt;

                      Und das Resultat:

                      Alle Objekte heissen Wohnanlage....

                      Kommentar


                      • #12
                        Zitat von Lacternobite
                        Die Objektnamen stehen nicht in der DB,
                        Dann schreib sie rein. Was Du in dem Falle suchst, ist der Spaltentyp ENUM.

                        Kommentar


                        • #13
                          Die Objektnamen sollen ja eben nicht in die db !

                          Bisher standen die Objektnamen in jeder ausgebenden Datei (ca. 30). Damit bei Änderungen ich nicht alle 30 Dateien ändern muss, soll das in eine objekt.inc.php (die schneller zu ändern ist als 30 Dateien).

                          aber wenn per "SELECT objekt FROM i_auctions"

                          4 (Bungalow),
                          1 (Zweifamilienhaus),
                          8 (Eigentumswohnung 3 Zi.),
                          12 (Mehrfamilienhaus)

                          rauskommt, warum wird dann nicht auch

                          Bungalow, Zweifamilienhaus,Eigentumswohnung 3 Zi., Mehrfamilienhaus

                          ausgegeben ? Es wird für alle Wohnanlage ausgegeben.....

                          Kommentar


                          • #14
                            Zitat von Lacternobite
                            Die Objektnamen sollen ja eben nicht in die db !
                            "Warum einfach, wenn's umständlich geht!"

                            Bevor ich Dich mit Deinem hausgemachten Problem alleine lasse, noch zwei Tips:
                            1. Datenbanken plant man so, daß man effizient an die Ergebnissen rankommt.
                            2. man läßt sich nur dann das Ergebnis als Objekt zurückgeben, wenn die Namen bekannt sind. Sonst will man assoziative Arrays, weil es foreach() aber kein "forobject()" gibt.

                            Kommentar


                            • #15
                              Dass die Objektnamen nicht in die Datenbank soll, ist nicht mein Wunsch, sondern mir so vorgegeben.

                              Und die Namen sind bekannt: 4, 12, 1 etc. (ich weiss das sind Ziffern, aber andererseits auch Namen, oder ?)

                              Und wenn ich sage, 4=Einfamilienhaus, dann müsste doch (rein theoretisch) auch Einfamilienhaus ausgegeben werden...

                              Kommentar

                              Lädt...
                              X