Ankündigung

Einklappen
Keine Ankündigung bisher.

Mit SQL-Abfrage Informationen aus 2 Zeilen ausgeben

Einklappen

Neue Werbung 2019

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

  • Mit SQL-Abfrage Informationen aus 2 Zeilen ausgeben

    Hallo zusammen,

    ich habe folgendes Problem.

    Ich habe einen Online-Shop. Um unseren Kunden einen Mehrwert zu bieten, habe ich nun noch einen Blog mit Wordpress aufgebaut. Jetzt möchte ich die ersten 3 Artikel auf der Startseite des Online-Shops anzeigen. Das funktioniert soweit auch ganz gut mit folgendem Skript:

    PHP-Code:
      //Datenbankzugriffsvariablen 
      
    $dbname="***"
      
    $dbhost="***"
      
    $dbuser="***"
      
    $dbpass="***";    
     
      
    //SQL Befehl zur Abfrage der Postings 
    $sql "SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post'  ORDER by ID DESC LIMIT 0,3"
     
      
    //Datenbank öffnen, SQL-Befehl ausführen, Datenbank schließen 
    $db mysql_connect($dbhost,$dbuser,$dbpass) or die("Konnte keine Verbindung zur Datenbank herstellen"); 

    mysql_select_db($dbname$db); 

    $sqlRes mysql_query($sql,$db);  

    mysql_close($db);
     
      
    //Nun die Titel ausgeben 
    $recordCount mysql_num_rows($sqlRes); 
     
      for (
    $i 0;$i $recordCount;$i++) { 
          
    $arCur mysql_fetch_array($sqlRes);        
           

    $blogcontent $arCur['post_content'];
    if (
    strlen($blogcontent) >= 440) { $blogcontent substr($blogcontent,0440) . "..."; }


    echo 
    "<a href=\"" $arCur["guid"] . "\" title=\"" $arCur["post_title"] . "\" class=\"" $bloglink "\"><div id=\"blog\">";
    echo 
    "<div style=\"width:250px; height:150px;  float:left;\">Bild</div>";
    echo 
    "<div style=\"width:445px; height:150px;  float:right; margin-left: 5px;\">";
    echo 
    "<div><h2>" $arCur["post_title"] . "</h2></div>";
    echo 
    "<div>" $blogcontent "</div>";
    echo 
    "</div></div></a>";
          

    Nun habe ich allerdings folgendes Problem. Mit dem obigem Code erhalte ich alle meine Inhalte, nur nicht die Artikelbilder, weil diese in der Tabelle extra abgespeichert werden. In etwa so:

    Code:
    Tabelle: wp_posts
    
    ID | post_title | post_content | parent_post | post_type | guid
    
    Post: 80 | Überschrift | Inhalt des Beitrags| 0 | Post | Link zum Artikel
    Bild: 81 | Dateiname| leer | 80 | attachment | Link zum Bild
    Leider habe ich keine Ahnung, wie ich es nun hinbekomme, dass ich auch das Artikelbild bekomme. Ich hoffe, ihr könnt mir den nötigen Tipp geben.

    Beste Grüße


  • #2
    Du müsstest über JOIN oder Subselect weiterkommen.

    Nebenbei lass Dir bitte gesagt sein, daß die mysql_*-Erweiterung deprecated ist und zukünftig nicht mehr zur Verfügung steht!
    Informiere Dich über MySQLi oder PDO
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Entweder mit einer 2. Abfrage (einfach aber unschön), oder mit JOIN (komplizierter aber besser).

      PS: mysql_ sollte nicht mehr verwendet werden.,

      Edit: Zu spät
      mysql ist veraltet Mails senden: Ohne Probleme und ohne mail()
      PHP-Code:
      echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>'

      Kommentar


      • #4
        Zitat von Arne Drews Beitrag anzeigen
        Du müsstest über JOIN oder Subselect weiterkommen.
        Dumm nur, daß er die Spalten, die er da nutzen könnte, unterschiedliche Datentypen hat.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Warum? Über parent_post? Scheint ein INT zu sein...
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Zitat von Arne Drews Beitrag anzeigen
            Warum? Über parent_post? Scheint ein INT zu sein...
            Ja, aber die ID scheinbar nicht: "Post: 80"
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Ich vermute mal, daß das im Original auch ne Ganzzahl ist, also in dem Fall 80.
              Post: und Bild: hat er nur zu unserer Erklärung davorgesetzt, denke ich!
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Riesen Dank schon einmal für die zahlreiche Unterstützung.

                Genau, Post: und Bild: ist nur die Erklärung. Die ID wird als INT gespeichert.

                Mein Problem ist halt, dass es in der selben Tabelle gespeichert wird. Ich kenne JOIN nur, um 2 Tabellen zusammenzufügen. Jetzt habe ich etwas recherchiert und bin auf SELF JOIN gestoßen, um eine Tabelle mit sich selbst zu verknüpfen. Ist das der richtige Weg?

                Ich hoffe nicht! Die Info macht mir Angst:
                Dieser Join ist wohl der am schwersten zu verstehende JOIN


                Beste Grüße

                Kommentar


                • #9
                  Code:
                  SELECT bla.id, bla.feld, parent.feld 
                  FROM Tabelle bla 
                  JOIN Tabelle parent 
                      ON bla.parend_id = parent.id
                  Verhält sich wie ein gewöhnlicher Join. Keine Angst machen lassen. Den Anforderungen entsprechend die richtige Join-Art wählen (left, right, inner, cross)
                  Relax, you're doing fine.
                  RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                  Kommentar


                  • #10
                    Ok, ich habe es mal versucht:

                    PHP-Code:
                      //Datenbankzugriffsvariablen 
                      
                    $dbname="***"
                      
                    $dbhost="***"
                      
                    $dbuser="***"
                      
                    $dbpass="***";    
                     
                      
                    //SQL Befehl zur Abfrage der Postings 
                     
                      
                    $sql "SELECT a.ID, a.post_title, a.post_content, a.guid, b.guid, b.post_parent
                            FROM wp_post a
                            JOIN wp_post b
                            ON a.ID = b.post_parent
                            WHERE a.post_status = 'publish' AND a.post_type = 'post'  
                            ORDER by ID DESC LIMIT 0,3"
                    ;
                     
                      
                    //Datenbank öffnen, SQL-Befehl ausführen, Datenbank schließen 
                      
                    $db mysql_connect($dbhost,$dbuser,$dbpass) or die("Konnte keine Verbindung zur Datenbank herstellen"); 
                        
                    mysql_select_db($dbname$db); 
                        
                    $sqlRes mysql_query($sql,$db);  
                      
                    mysql_close($db); 
                    Das hat leider nicht funktioniert. Mit mysql_error kam folgende Meldung raus:
                    Table '***.wp_post' doesnt exist. Die *** stehen für den Inhalt in $dbname.
                    Warum exisitiert die Tabelle plötzlich nicht, nur weil ich die sql-Abfrage nun mit JOIN probiere?
                    Wo liegt mein Fehler?

                    P.S.: Keine Sorge, ich werde noch auf mysqli umstellen

                    Kommentar


                    • #11
                      Lass Dir die generierte Query ausgeben und setze sie in phpMyAdmin o.ä. an. Da bekommst Du evtl. zu wissen, was falsch ist.
                      Wenn dort auch kommt, daß die Tabelle nicht existiert, gehe ich davon aus, daß in $dbname etwas falsches steht!
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar


                      • #12
                        Ok, vielen Dank schon einmal für den Tipp.

                        Ich habe versucht mir $sqlRes auszugeben. Leider scheint es keinen Inhalt zu haben. Bei $db ist noch alles in Ordnung. Da wird mir Resource id#1000 ausgegeben. Der DB-Name ist richtig. Den habe ich noch einmal kontrolliert und es hatte ja auch zuvor funktioniert. Wie kann das sein?

                        Kommentar


                        • #13
                          Was sagt denn
                          PHP-Code:
                          var_dump$sqlRes ); 
                          Competence-Center -> Enjoy the Informatrix
                          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                          Kommentar


                          • #14
                            bool(false)
                            bzw. wenn ich es fetche gibt er mir NULL zurück.
                            Liegt der Fehler vielleicht in der SQL, dass er mir daher keine Daten ausgibt? Aber warum sagt er mir dann, dass der dbname falsch wäre?

                            Vielen Dank für deine Unterstützung Arne Drews!

                            Kommentar


                            • #15
                              iegt der Fehler vielleicht in der SQL, dass er mir daher keine Daten ausgibt?
                              Genau das! Deshalb:
                              Lass Dir die generierte Query ausgeben und setze sie in phpMyAdmin o.ä. an. Da bekommst Du evtl. zu wissen, was falsch ist.
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X