![]() |
Datenbank: MySQL • Zugriff über: PHP-MySQL-Extension
[MySQL] Vereinfachung einer Abfrage mit Subquery
Morgen.
Ich habe zwei Tabellen, ni_categories und ni_articles, sie stehen in der Relation 1:n. Ich will jetzt in der Spalte ni_categories.articles die Anzahl der Zeilen in ni_articles mit ni_articles.catid=ni_categories.catid speichern. Momentan sieht mein Query so aus:
SQL-Code:
Kann man das auch einfacher machen?
UPDATE ni_categories c SET c.articles=(SELECT COUNT(a.articleid) FROM ni_articles a WHERE a.catid=c.catid)
|
Re: [MySQL] Vereinfachung einer Abfrage mit Subquery
Zitat:
|
Re: [MySQL] Vereinfachung einer Abfrage mit Subquery
Ich hätte gemeint, man könnte den Subquery irgendwie durch eine GROUP BY-Klausel ersetzen, aber wenn es ohne den Subquery nicht geht, ist das auch kein Problem.
|
Re: [MySQL] Vereinfachung einer Abfrage mit Subquery
Zitat:
ich würde Dir hier zustimmen, dass eine Unterabfrage das ganze vielleicht schneller machen könnte. Sicher bin ich mir nicht, kommt wohl unter anderem auf die Anfrageoptimierung an, aber so an sich könnte man die Selektion in eine verschachtelte Anfrage überführen, wobei die innere Anfrage nicht mit der äußeren korreliert. Damit sollte die innere Anfrage einmalig ausgeführt werden und das könnte (wie gesagt, bin nicht sicher) viel effizienter ablaufen als die unverschachtelte Anfrage. Da sollte man einfach mal testen, was schneller läuft. Was ich meine ist etwas in der Richtung:
SQL-Code:
Hier sollte (wenn ich mich nicht irre) die innere Abfrage nur einmalig ausgeführt werden und die Selektionen auf deren Auswertung geht dann recht flink. Im Einzeiler würde im Worst-Case ein kompletter Durchlauf für jede catid nötig sein, so was dann zu einer deutlich höheren Laufzeit führt (wenn die Datenmenge groß genug ist).
UPDATE ni_categories c
SET c.articles = SELECT ac.articleCount FROM (SELECT a.catid, COUNT(a.articleid) as articleCount FROM ni_articles a GROUP BY a.catid) ac WHERE ac.catid = c.catid Ich denke mal, Du meintest auch etwas in der Richtung? Gruß Der Unwissende |
Re: [MySQL] Vereinfachung einer Abfrage mit Subquery
Sieht gut aus. Ich hätte gedacht, man könnte das ganze mit JOINs und einem GROUP BY auch ohne Subqueries machen, aber muss ja nicht sein. Ich probier das mal aus.
EDIT: Ich hab mal die erste Unterabfrage rausgenommen und es funktioniert. Nur eben, wie genau weiß ich nicht.
SQL-Code:
UPDATE ni_categories c,
( SELECT a.catid, COUNT( a.articleid ) AS articleCount FROM ni_articles a GROUP BY a.catid )ac SET c.articles = ac.articleCount WHERE ac.catid = c.catid |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz