David: Spalten aus SQL-Tabelle mit PHP auslesen

Hi !
Ich habe eine Frage:
Ich lese aus einer MySQL-Tabelle Zeile für Zeile immer dieselbe Spalte (guid) aus. Ich möchte dann meine Ergebnisse mit einer Variable vergleichen. Wenn diese mit einem Ergebnis übereinstimmt, möchte ich aus der betroffenen Zeile die andere Spalte (post_title) ausgeben.

Mit folgendem Code

$sql = "SELECT post_title,guid FROM wp_posts;";
$result = mysql_query($sql) OR die(mysql_error());

echo "News in der Datenbank:<br />\n";
    while($row = mysql_fetch_assoc($result)) {
        echo $row['post_title']." <br />\n";}

erhalte ich ALLE post_title's . Wo und muss ich den Vergleich mit meiner Variable einfügen ?

  1. Hi,

    die Frage hast du dir eigentlich schon selbst beantwortet:

    1. Du möchtest alles Datensätze durchlaufen       <-- Das ist die while-Schleife
    2. Wenn das Ergebnis mit der Var. übereinstimmt   <-- Das hier ist der Vergleich
    3. ...dann soll es ausgegeben werden              <-- Das hier ist das echo

    Wohin muss es also? Hinter das while, vor das echo. Damit's syntaktisch korrekt bleibt natürlich innerhalb der {}-Klammern.

    MfG
    Rouven

    --
    -------------------
    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
    1. Hi !
      Sorry, ich habe ein kleines Wort vergessen: Hinter das "wo und" musste noch ein WIE !
      Danke schonmal für Deine Antwort, aber jetzt muss ich auch noch wissen, WIE ich diesen Vergleich von der Syntax her ausdrücke...Danke

      1. Hi,

        wo hast du denn den bisherigen Code her? Vergleiche gehören ja irgendwie schon zu den elementaren Kontrollstrukturen.
        Ersetze im Beispiel $a durch $row["guid"], > durch = und $b durch die zu vergleichende Variable...

        MfG
        Rouven

        --
        -------------------
        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
        1. Hm den Code hab ich mir aus dem quake tutorial zusammengeschustert, da ich bisher keine Ahnung von php hab. Hab mal Delphi Programmiert und daher kenn ich Verleiche schon, aber wusste nicht, ob das in php auch so geht...also auch wenn ich den Code abänder in

          echo get_bloginfo('home'),"/",$subdir,"/",$str_path,"/",$f;

          $sql = "SELECT post_title,guid FROM wp_posts;";
          $result = mysql_query($sql) OR die(mysql_error());

          echo "News in der Datenbank:<br />\n";
          while($row = mysql_fetch_assoc($result)) {if ($row['guid']='irgendwas')
          echo $row['post_title']." <br />\n";}

          dann ändert sich komischerweise gar nichts ?!
          Weil 'irgendwas' in keiner der Spalten vorkommt, dürfte ja eigentlich gar nichts ausgegeben werden....was mach ich falsch ?

          1. Hi,

            Weil 'irgendwas' in keiner der Spalten vorkommt, dürfte ja eigentlich gar nichts ausgegeben werden....was mach ich falsch ?

            ähm, *hüstel*, du lässt dich von mir verleiten. Asche auf mein Haupt. PHP verwendet als Vergleichsoperator natürlich *dummdidummdidumm* nicht "=" sondern "==". Sorry...

            MfG
            Rouven

            --
            -------------------
            ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
            1. ich glaub soweit hat das geklappt.
              jetzt muss ich nur das 'irgendwas' durch einen string, der aus variablen besteht, ersetzen.
              Der String lautet

              get_bloginfo('home'),"/",$subdir,"/",$str_path,"/",$f

              Wie krieg ich den hinter das == ? Muss ich den irgendwie in Klammern oder so setzen ? Wie gesagt, hab noch nicht wirklich nen Plan von PHP...

              1. Hi,

                get_bloginfo('home'),"/",$subdir,"/",$str_path,"/",$f

                WAS zum Teufel ist das? Dieser ,-Operator ist mir mal wieder suspekt, wir hatten das Thema vor ein paar Wochen erst, aber ich hab irgendwie mal wieder keine Ahnung wonach ich suchen soll. Das war irgendwas mit "werte alle Ausdrücke aus und gib den letzten als Rückgabewert zurück" oder so.
                Was soll denn das Konstrukt am Ende mal tun?

                MfG
                Rouven

                --
                -------------------
                ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
                1. Also ich modifiziere das Wordpress-PlugIn "Duh-Gallery", weil ich unter jedem in der Galerie aufgerufenen Bild eine Bildbeschreibung haben will.
                  Wenn man in WordPress ein Bild hochlädt, kann man optional eine Beschreibung angeben, die dann in der Datenbank dem Bild zugewiesen wird. Diese Beschreibung wird jedoch leider nicht automatisch angezeigt.

                  Daher behelfe ich mir so: Da ich ja weiß, welches Bild aktuell angezeigt wird (über den besagten String bekomme ich per "echo-Funktion" den kompletten Web-Pfad raus), such ich in der Datenbank nach der Spalte mit diesem Pfad und gebe dann den Inhalt einer anderen Spalte derselben Zeile aus, die die Beschreibung enthält.

                  Also mit

                  echo get_bloginfo('home'),"/",$subdir,"/",$str_path,"/",$f;

                  krieg ich z.B. : www.blablabla.de / images / mai06 / bild.jpg
                  raus.
                  Nun ist das ja ein aus mehreren Variablen zusammengesetzter String. Wie krieg ich den in meinen Vergleich eingebunden ?

                  1. Hi,

                    echo get_bloginfo('home'),"/",$subdir,"/",$str_path,"/",$f;

                    ah, ich hatte gehofft, dass du sowas sagst, denn echo ist eine Besonderheit was die Verarbeitung dieses Operators angeht und verhält sich genau so, als hätte man alles auf einen String konkateniert. Wenn du das bei einer Variable anstellen willst funktioniert es nicht so, dann muss man auf den normalen Concat-Operator (in PHP ".") ausweichen:

                    $vergleich = get_bloginfo('home')."/".$subdir."/".$str_path."/".$f;

                    zzgl. dutzender weiterer Varianten... (da PHP Variablen (keine Funktionen) innerhalb von " auch interpretiert)

                    MfG
                    Rouven

                    --
                    -------------------
                    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
                    1. Super !
                      Vielen Dank, es funktioniert tatsächlich !
                      Danke dass Du Dir soviel Zeit für mich Noob genommen hast :-)

                      Schönen Abend Dir noch !!!

                      David

                      PS: Die Punkte sind also sozusagen den Kommas ebenbürtig, wenn man kein echo benutzt ?

                      1. Die Punkte sind also sozusagen den Kommas ebenbürtig, wenn man kein echo benutzt ?

                        Ne, eigentlich anders herum. Der Punkt ist der eigentliche Concat-Operator. Komma macht eigentlich was anderes und ist ein IMHO eher seltenes Konstrukt. Im Zusammenhang mit echo wirkt es sich "zufällig" genau so aus wie ein ".".
                        Für normale String-Concats sollte/muss man sich an "." halten.

                        MfG
                        Rouven

                        --
                        -------------------
                        ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
                        1. Ok alles klar...
                          ich werde mich dann ab jetzt häufiger mit PHP beschäftigen....machs gut !!! :-)

                        2. ...wobei ich am Ende der ganzen Sache trotzdem noch mal auf Vinzenz' Vorschlag hinweisen will: Alle Sätze auszulesen nur um hinterher zu suchen ist sehr ineffizient.
                          $vergleich = ...;
                          -> $sql = "SELECT post_title, guid
                                     FROM wp_posts
                                     WHERE guid = '$vergleich'";
                          wäre da schon effizienter.

                          MfG
                          Rouven

                          --
                          -------------------
                          ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
  2. Hallo David,

    Ich lese aus einer MySQL-Tabelle Zeile für Zeile immer dieselbe Spalte (guid) aus. Ich möchte dann meine Ergebnisse mit einer Variable vergleichen. Wenn diese mit einem Ergebnis übereinstimmt, möchte ich aus der betroffenen Zeile die andere Spalte (post_title) ausgeben.

    verstehe ich Dich richtig. Die anderen Zeilen interessieren Dich überhaupt nicht? Dann formuliere Deine Abfrage doch so, dass Du nur die Zeilen erhältst, die Du benötigst, statt:

    $sql = "SELECT post_title,guid FROM wp_posts;";

    $sql = '[code lang=sql]SELECT  
        post_title,  
        guid  
    FROM wp_posts  
    WHERE guid = ' . $die_vergleichs_variable
    ~~~;[/code]  
      
    Benötigst Du die anderen Zeilen, so solltest Du an geeigneter Stelle, Rouven hatte das Dir bereits geschrieben, die Kontrollstruktur [if](http://www.php.net/manual/de/language.control-structures.php#control-structures.if) verwenden.  
      
      
    Freundliche Grüße  
      
    Vinzenz