MYSQL Wordpress Meta Daten Analyse – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self MYSQL Wordpress Meta Daten Analyse Fri, 07 Jun 19 06:57:51 Z https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750079#m1750079 https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750079#m1750079 <p>Hallo,</p> <p>vorweg bitte keine Diskussionen über Wordpress oder ein anderes CMS, Danke.</p> <p>Nun zu meiner Frage: Wordpress nutzt eine sog. "post_meta" mysql Tabelle um benutzerdefinierte Inhalte zu speichern.</p> <p>Spalte 1 "meta_id" ist eine fortlaufende ID<br> Spalte 2 "post_id" enthält die ID des Artikels dem Sie zugewiesen ist<br> Spalte 3 "meta_key" Enthält den Schlüssel (benutzerdefinierten Felder)<br> Spalte 4 "meta_value" Enthält dann den zugewiesenen Wert</p> <p>Ich möchte nun alle Artikel bei denen im "meta_key" -> "_kksr_avg" der "meta_value" = 5 ist, UND bei der gleichen "post_id" muss auch der "meta_key" -> "_kksr_casts" den "meta_value" (gleich größer) 2 sein.</p> <p>Jetzt könnte man einfach zwei MYSQL Abfragen hintereinander setzten:</p> <pre><code class="block language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>wp_postmeta<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>meta_key<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'_kksr_avg'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_value<span class="token punctuation">`</span></span> <span class="token operator">=</span> <span class="token string">'5.00'</span> <span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>wp_postmeta<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>meta_key<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'_kksr_casts'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_value<span class="token punctuation">`</span></span> <span class="token operator">>=</span> <span class="token string">'2'</span> </code></pre> <p>beides in ein Arry setzen und dann vergleichen. Unschön Join ist auch eher für zwei verschiedene Tabellen gedacht, und Group by!?!?</p> <p>Wie würdet Ihr das Problem lösen? Danke für eure Denkanstöße</p> MYSQL Wordpress Meta Daten Analyse Fri, 07 Jun 19 07:01:58 Z https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750080#m1750080 https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750080#m1750080 <p>Natürlich kannst Du diese Tabellen joinen. Machs doch einfach. MFG</p> MYSQL Wordpress Meta Daten Analyse Fri, 07 Jun 19 07:26:50 Z https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750082#m1750082 https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750082#m1750082 <p>Tach!</p> <blockquote> <p>Jetzt könnte man einfach zwei MYSQL Abfragen hintereinander setzten:</p> <pre><code class="block language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>wp_postmeta<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>meta_key<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'_kksr_avg'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_value<span class="token punctuation">`</span></span> <span class="token operator">=</span> <span class="token string">'5.00'</span> <span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>wp_postmeta<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>meta_key<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'_kksr_casts'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_value<span class="token punctuation">`</span></span> <span class="token operator">>=</span> <span class="token string">'2'</span> </code></pre> <p>beides in ein Arry setzen und dann vergleichen. Unschön Join ist auch eher für zwei verschiedene Tabellen gedacht, und Group by!?!?</p> <p>Wie würdet Ihr das Problem lösen?</p> </blockquote> <p>Dein eigentliches Ziel sind doch sicher nicht die Metadaten sondern die Artikel. Wenn ja, würde ich von der Tabelle wp_posts ausgehen und dazu die Bedingungen formulieren. Joins sind auch eher unschön, weil sie ein kartesiches Produkt (zumindest als Zwischenschritt) erzeugen, was hier aber nicht das Ziel ist. Deshalb plädiere ich für EXISTS-Subquerys.</p> <pre><code class="block language-sql"><span class="token keyword">SELECT</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> <span class="token keyword">FROM</span> wp_posts p <span class="token keyword">WHERE</span> <span class="token keyword">EXISTS</span><span class="token punctuation">(</span><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> wp_postmeta <span class="token keyword">WHERE</span> post_id <span class="token operator">=</span> p<span class="token punctuation">.</span>ID <span class="token operator">AND</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span> <span class="token operator">AND</span> <span class="token keyword">EXISTS</span><span class="token punctuation">(</span><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> wp_postmeta <span class="token keyword">WHERE</span> post_id <span class="token operator">=</span> p<span class="token punctuation">.</span>ID <span class="token operator">AND</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span> </code></pre> <p>Ich finde auch, die Abfrage so gestellt, zeigt gleich, was man eigentlich möchte. Ein Join hingegen ist eigentlich ein Umweg aus technischen Gründen.</p> <p>Wenn du allerdings die Daten von wp_postmeta in der Ergebnismenge brauchst, müsste wohl doch ein Join her.</p> <p>dedlfix.</p> MYSQL Wordpress Meta Daten Analyse Fri, 07 Jun 19 07:08:53 Z https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750081#m1750081 https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750081#m1750081 <p>Äh und wie soll das funktionieren?</p> <pre><code class="block language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>wp_postmeta<span class="token punctuation">`</span></span> <span class="token keyword">JOIN</span> <span class="token identifier"><span class="token punctuation">`</span>wp_postmeta<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> post_id <span class="token operator">=</span> post_id <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_key<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'_kksr_avg'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_value<span class="token punctuation">`</span></span> <span class="token operator">=</span> <span class="token string">'5.00'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_key<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'_kksr_casts'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_value<span class="token punctuation">`</span></span> <span class="token operator">>=</span> <span class="token string">'2'</span> </code></pre> <p>kann ja nicht funktionieren!?! ?</p> MYSQL Wordpress Meta Daten Analyse Fri, 07 Jun 19 07:35:01 Z https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750083#m1750083 https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750083#m1750083 <p>Tach!</p> <blockquote> <p>Äh und wie soll das funktionieren?</p> <pre><code class="block language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>wp_postmeta<span class="token punctuation">`</span></span> <span class="token keyword">JOIN</span> <span class="token identifier"><span class="token punctuation">`</span>wp_postmeta<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> post_id <span class="token operator">=</span> post_id <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_key<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'_kksr_avg'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_value<span class="token punctuation">`</span></span> <span class="token operator">=</span> <span class="token string">'5.00'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_key<span class="token punctuation">`</span></span> <span class="token operator">LIKE</span> <span class="token string">'_kksr_casts'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>meta_value<span class="token punctuation">`</span></span> <span class="token operator">>=</span> <span class="token string">'2'</span> </code></pre> <p>kann ja nicht funktionieren!?! ?</p> </blockquote> <p>Natürlich nicht, weil so nicht klar wird, aus welcher Tabelle das Datenfeld verwendet werden soll. Das wird mit zwei Aliasen eindeutig.</p> <p>LIKE ist auch nicht der passende Operator für Stringvergleiche, wenn keine variablen Anteile zu suchen sind. Nimm für feststehende Werte auch das <code>=</code>.</p> <p>dedlfix.</p> MYSQL Wordpress Meta Daten Analyse Fri, 07 Jun 19 07:35:08 Z https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750084#m1750084 https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750084#m1750084 <p>Hast Du Dir mal die JOIN-Syntax angeschaut? Da gibt es z.B. eine Funktion USING(key) wenn key der Name des Schlüssel ist welcher die Daten einer Detailtabelle referenziert. Einen solchen Schlüssel also brauchst Du und wenn die Namen nicht gleichlautend sind, dann notiere JOIN detail ON basekey = detailkey; Viel Erfolg!</p> MYSQL Wordpress Meta Daten Analyse Fri, 07 Jun 19 07:35:40 Z https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750085#m1750085 https://forum.selfhtml.org/self/2019/jun/7/mysql-wordpress-meta-daten-analyse/1750085#m1750085 <p><a href="/images/c69e04af-9749-4303-9596-b55bfded821e.gif" rel="noopener noreferrer"><img src="/images/c69e04af-9749-4303-9596-b55bfded821e.gif?size=medium" alt="" title="Wow" loading="lazy"></a></p> <p>Äh vielen, vielen Dank. Du hast mein Problem perfekt erkannt und erfasst.</p>