{"id":170,"date":"2017-02-16T16:32:32","date_gmt":"2017-02-16T15:32:32","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=170"},"modified":"2017-02-16T18:11:12","modified_gmt":"2017-02-16T17:11:12","slug":"bilder-join-aus-der-wp_posts-und-der-wp_postmeta","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/02\/16\/bilder-join-aus-der-wp_posts-und-der-wp_postmeta\/","title":{"rendered":"Bilder: Join aus der wp_posts und der wp_postmeta"},"content":{"rendered":"<p>Also, mal das Ziel nicht aus den Augen verlieren: wir wollten Bilder ausgeben, und zwar f\u00fcr den Anfang mal alle, mit den relevanten Bildinformationen alt-Text, Titel, Beschriftung und Beschreibung. Wie kriegen wir die jetzt aus den beiden Tabellen wp_posts und wp_postmeta raus? Ich seh schon das Glitzern in den Augen der alten Datenbankhasen: mit einem Join \u00fcber die ID, ganz klar. Damit man den \u00dcberblick nicht verliert, selektieren wir jetzt gezielt nicht mehr alle, sondern nur noch einige Felder aus der wp_posts und holen uns aus der wp_post_meta nur den meta_value. Im ersten Ansatz sieht das\u00a0 so aus:<\/p>\n<h2>Der angepa\u00dfte Select<\/h2>\n<p><em>Ich mu\u00dfte hier auf eine andere Test-Installation zur\u00fcckgreifen, weil ich viele Bilder brauchte. Die hat das Datenbank-Pr\u00e4fix &#8222;iii_wp&#8220; &#8211; mu\u00df man halt auf das eigene Pr\u00e4fix anpassen, tut mir leid wegen der Umst\u00e4nde.<br \/>\n<\/em><br \/>\nSELECT iii_wpposts.post_title as &#8222;Bildtitel&#8220;, iii_wpposts.post_content as &#8222;Bildbeschreibung&#8220;,<br \/>\niii_wpposts.post_excerpt as &#8222;Bildbeschriftung&#8220;, iii_wpposts.guid as &#8222;Bild_url&#8220;, iii_wppostmeta.meta_value as &#8222;Bild_alt_text&#8220; FROM iii_wpposts<br \/>\nINNER JOIN iii_wppostmeta ON iii_wpposts.ID = iii_wppostmeta.post_id<br \/>\nWHERE (((iii_wpposts.post_type) Like &#8222;attachment&#8220;) AND ((iii_wpposts.post_mime_type) Like &#8222;image\/jpeg&#8220;) AND ((iii_wppostmeta.meta_key) Like &#8222;_wp_attachment_image_alt&#8220;)))<\/p>\n<p>Wahrscheinlich k\u00f6nnte man in der WHERE-Klausel auf den post_type Like &#8222;attachment&#8220; verzichten, wir selektieren ja dann noch auf den post_mime_type Like &#8222;image\/jpeg&#8220;, aber schaden kanns auch nicht, das lasse ich mal so stehen.<\/p>\n<p>Statt iii_wp m\u00fcssen sie sich halt jetzt ihr eigenes Pr\u00e4fix denken, aber so funktioniert es prinzipiell. So geht der Inner Join der Tabellen \u00fcber die Post ID, letztendlich sollte das Statement im phpmyadmin jetzt genauso viele Datens\u00e4tze ausgeben, wie wir Bilder in der Mediathek haben.<\/p>\n<div id=\"attachment_187\" style=\"width: 1027px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-187\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-187 size-full\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/02\/inner_join_ergebnis.jpg\" alt=\"inner_join_ergebnis\" width=\"1017\" height=\"354\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/02\/inner_join_ergebnis.jpg 1017w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/02\/inner_join_ergebnis-300x104.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/02\/inner_join_ergebnis-768x267.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2017\/02\/inner_join_ergebnis-624x217.jpg 624w\" sizes=\"(max-width: 1017px) 100vw, 1017px\" \/><p id=\"caption-attachment-187\" class=\"wp-caption-text\">inner_join_ergebnis<\/p><\/div>\n<p>Warum stehen im Select die ganzen &#8222;as&#8220;-Klauseln? Weil wir die Alias-Namen der Felder nachher f\u00fcr die PHP-Ausgabe brauchen.<\/p>\n<p>Pa\u00dft alles? Fein, dann machen mir mal weiter mit:<\/p>\n<h2>Arme Waisenkinder: Bilder ohne Eltern<\/h2>\n<p>Die alten F\u00fcchse haben sicher schon mit der parent_id gelieb\u00e4ugelt, die riecht ja f\u00f6rmlich nach einem Join zum Beitrag, aber wir machen mal einen Schritt nach dem anderen. Wenn man sich die Datens\u00e4tze aus dem Abfrageergebnis mal genauer anschaut, kann es sein da\u00df bei einigen Datens\u00e4tzen im Feld parent_id eine Null steht. Das sind die Datens\u00e4tze, die man sich in der Mediathek unter &#8222;Nicht verkn\u00fcpft&#8220; anschauen kann, also Bilder, die zwar hochgeladen, aber noch nicht mit einem Beitrag oder einer Seite verkn\u00fcpft worden sind, oder die aus einem Beitrag oder einer Seite gel\u00f6scht wurden, aber nicht aus der Mediathek.<\/p>\n<p>Ob wir die jetzt mitnehmen oder nicht ist Geschmackssache, aber man sollte zumindest wissen, da\u00df die auch da sind, wenn man ALLE Bilder ausgibt. Und das machen wir im n\u00e4chsten Beitrag. Morgen. Ich mu\u00df mich jetzt erstmal von dem ganzen Felderwirrwarr erholen &#8211; ich will eine vern\u00fcnftige Attachment-Tabelle f\u00fcr mein WordPress! \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Also, mal das Ziel nicht aus den Augen verlieren: wir wollten Bilder ausgeben, und zwar f\u00fcr den Anfang mal alle, mit den relevanten Bildinformationen alt-Text, Titel, Beschriftung und Beschreibung. Wie kriegen wir die jetzt aus den beiden Tabellen wp_posts und wp_postmeta raus? Ich seh schon das Glitzern in den Augen der alten Datenbankhasen: mit einem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9,7,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/170"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":12,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/170\/revisions"}],"predecessor-version":[{"id":201,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/170\/revisions\/201"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}