AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [MySQL] Vereinfachung einer Abfrage mit Subquery
Thema durchsuchen
Ansicht
Themen-Optionen

[MySQL] Vereinfachung einer Abfrage mit Subquery

Ein Thema von 3_of_8 · begonnen am 4. Jun 2007 · letzter Beitrag vom 4. Jun 2007
Antwort Antwort
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

[MySQL] Vereinfachung einer Abfrage mit Subquery

  Alt 4. Jun 2007, 02:32
Datenbank: MySQL • Zugriff über: PHP-MySQL-Extension
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:
UPDATE ni_categories c SET c.articles=(SELECT COUNT(a.articleid) FROM ni_articles a WHERE a.catid=c.catid) Kann man das auch einfacher machen?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

Re: [MySQL] Vereinfachung einer Abfrage mit Subquery

  Alt 4. Jun 2007, 09:23
Zitat von 3_of_8:
Ich will jetzt in der Spalte ni_categories.articles die Anzahl der Zeilen in ni_articles mit ni_articles.catid=ni_categories.catid speichern.
Ööhmmm... wozu? Auf jeden Fall wüsste ich nicht, wie man das Statement vereinfachen könnte (wieso eigentlich? Ist doch recht kurz und knapp).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [MySQL] Vereinfachung einer Abfrage mit Subquery

  Alt 4. Jun 2007, 11:01
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: [MySQL] Vereinfachung einer Abfrage mit Subquery

  Alt 4. Jun 2007, 11:25
Zitat von 3_of_8:
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.
Hi,
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:
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
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).
Ich denke mal, Du meintest auch etwas in der Richtung?

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [MySQL] Vereinfachung einer Abfrage mit Subquery

  Alt 4. Jun 2007, 11:41
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
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz