SQL-Befehel geht seit PHP 7 nicht mehr – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self SQL-Befehel geht seit PHP 7 nicht mehr Wed, 10 Aug 16 18:16:17 Z https://forum.selfhtml.org/self/2016/aug/10/sql-befehel-geht-seit-php-7-nicht-mehr/1673134#m1673134 https://forum.selfhtml.org/self/2016/aug/10/sql-befehel-geht-seit-php-7-nicht-mehr/1673134#m1673134 <p>Hi, ich setze in einem Web-Projekt folgenden SQL-Befehl ein:</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 punctuation">(</span> <span class="token keyword">SELECT</span> <span class="token identifier"><span class="token punctuation">`</span>t_Posts<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>ID<span class="token punctuation">`</span></span><span class="token punctuation">,</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> <span class="token identifier"><span class="token punctuation">`</span>t_Votes<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>UpDown<span class="token punctuation">`</span></span> <span class="token operator">></span> <span class="token number">0</span> <span class="token keyword">THEN</span> <span class="token number">1</span> <span class="token keyword">END</span><span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> <span class="token identifier"><span class="token punctuation">`</span>t_Votes<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>UpDown<span class="token punctuation">`</span></span> <span class="token operator">=</span> <span class="token number">0</span> <span class="token keyword">THEN</span> <span class="token number">1</span> <span class="token keyword">END</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> <span class="token identifier"><span class="token punctuation">`</span>Votes<span class="token punctuation">`</span></span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>t_Posts<span class="token punctuation">`</span></span> <span class="token keyword">LEFT</span> <span class="token keyword">JOIN</span> <span class="token identifier"><span class="token punctuation">`</span>t_Votes<span class="token punctuation">`</span></span> <span class="token keyword">ON</span> <span class="token identifier"><span class="token punctuation">`</span>t_Posts<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>ID<span class="token punctuation">`</span></span> <span class="token operator">=</span> <span class="token identifier"><span class="token punctuation">`</span>t_Votes<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>PostID<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>t_Posts<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>ThreadID<span class="token punctuation">`</span></span> <span class="token operator">=</span> <span class="token number">2</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>t_Posts<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>ID<span class="token punctuation">`</span></span> <span class="token operator"><></span> <span class="token number">1</span> <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token identifier"><span class="token punctuation">`</span>t_Votes<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>PostID<span class="token punctuation">`</span></span> <span class="token punctuation">)</span> vot <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> <span class="token identifier"><span class="token punctuation">`</span>vot<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>Votes<span class="token punctuation">`</span></span> <span class="token keyword">DESC</span><span class="token punctuation">,</span> <span class="token identifier"><span class="token punctuation">`</span>vot<span class="token punctuation">`</span></span><span class="token punctuation">.</span><span class="token identifier"><span class="token punctuation">`</span>ID<span class="token punctuation">`</span></span> <span class="token keyword">DESC</span> </code></pre> <p>Unter PHP 5 hat noch alles super funktioniert. Aber seit ich PHP 7 einsetze funktioniert es nicht mehr. Allerdings wurde bei dem PHP-Update auch die MySQL-Version aktualisiert, aktuell nutze ich 5.7.13, welche vorher installiert war weiß ich nicht mehr.</p> <p>Hier die Fehlermeldung:</p> <pre><code class="block">#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'myqa.t_Posts.ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by </code></pre> <p>Vielleicht nutze ich irgendeine Funktion, die früher Deprecated war und jetzt rausgeflogen ist. Ich habe keine Ahnung.</p> SQL-Befehel geht seit PHP 7 nicht mehr Wed, 10 Aug 16 18:23:13 Z https://forum.selfhtml.org/self/2016/aug/10/sql-befehel-geht-seit-php-7-nicht-mehr/1673135#m1673135 https://forum.selfhtml.org/self/2016/aug/10/sql-befehel-geht-seit-php-7-nicht-mehr/1673135#m1673135 <p>Ok, ich hab den Fehler selbst gefunden ^^ Beim GROUP BY muss <code>t_Posts</code>.<code>ID</code> hin.</p> SQL-Befehel geht seit PHP 7 nicht mehr Thu, 11 Aug 16 06:08:57 Z https://forum.selfhtml.org/self/2016/aug/10/sql-befehel-geht-seit-php-7-nicht-mehr/1673140#m1673140 https://forum.selfhtml.org/self/2016/aug/10/sql-befehel-geht-seit-php-7-nicht-mehr/1673140#m1673140 <p>Tach!</p> <blockquote> <pre><code class="block">#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'myqa.t_Posts.ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by </code></pre> </blockquote> <p>Der Fehlermeldungstext sagt aus, was die Ursache ist. Üblicherweise kann man bei einem GROUP BY keine Felder in der SELECT-Klausel angeben, die nicht einerseits in der GROUP-BY-Bedingung stehen oder andererseite mit einer Aggregatfunktion zu einem einzigen Wert zusammengefasst wurden. Wenn beim Gruppieren mehr als ein Datensatz pro Gruppe entsteht, welcher Wert soll dann ins Ergebnis? Es gibt Fälle, da ist es immer derselbe Wert, besonders dann, wenn man nicht vollständig normalisiert und damit Redundanzen in der Datenbank hat.</p> <p>Andere DBMSe ahnden solche nicht eindeutige Situationen generell mit einem Fehler, MySQL hat sie bisher immer per Default zugelassen. Das Verhalten kann über sql_mode konfiguriert werden, wie die Fehlermeldung ja auch sagt. Ob das nun ein in der neuen Version geänderter Default-Wert oder eine individuelle Einstellung ist, kann ich aber nicht sagen.</p> <p>dedlfix.</p>