![]() |
Datenbank: MySQL • Version: 3.23.58 • Zugriff über: ZEOS
MySQL Query
Hallo zusammen,
kann ich die folgende SQL-Abfrage auch ohne subselect umsetzen? Die MySQL Version des Hosters unterstützt leider keine Subselects :-(( Es handels sich um eine Nested Set bei dem nur ein bestimmtes level angezeigt werden soll. select aa.* from ( SELECT n.id, n.bez, n.lft, n.rgt, count(*)-1+(n.lft>1) AS level FROM conf n, conf p WHERE n.lft BETWEEN p.lft AND p.rgt AND (p.id != n.id OR n.lft = 1) GROUP BY n.id ORDER BY n.lft) aa where aa.level = X X = Level das angezeigt werden soll Danke im voraus Baeuerle |
Re: MySQL Query
Zwei Fragen:
1. Beim inneren Select wird ein "Group By" nur auf einen Teil der Ergebnisspalten gemacht. Das funktioniert doch aber gar nicht, wenn die restlichen Spalten nicht Aggregate wie SUM, AVG etc. sind. 2. Wofür wird denn überhaupt ein äußeres Select um das innere herumgelegt? Würde nicht etwas in der Art
SQL-Code:
zum gleichen Ergebnis führen? Wobei allerdings zusätzlich das "Group By"-Problem aus meiner ersten Frage berücksichtigt werden muss. Evtl. muss das "count(*)-1+(n.lft>1) = X" dann in eine Having-Klausel.
SELECT n.id, n.bez, n.lft, n.rgt,
count(*)-1+(n.lft>1) AS level FROM conf n, conf p WHERE n.lft BETWEEN p.lft AND p.rgt AND (p.id != n.id OR n.lft = 1) AND count(*)-1+(n.lft>1) = X GROUP BY n.id ORDER BY n.lft |
Re: MySQL Query
Danke für deine Antwort:
zu 2) In der where-klausel können keine aggregatfunktionen wie count(), sum()... benutzt werden!!! |
Re: MySQL Query
Ich versteh zwar nicht um was es geht, aber so in etwa würds ich machen:
SQL-Code:
//Edit: ungetestet
SELECT n.id, n.bez, n.lft, n.rgt, count(*)-1+(n.lft>1) AS level
FROM conf n, conf p WHERE n.lft BETWEEN p.lft AND p.rgt AND (p.id != n.id OR n.lft = 1) and((select (count(*)-1+(n2.lft>1)) from conf n2)= X ) GROUP BY n.id ORDER BY n.lft //Edit2: kannst du sagen um was es geht? Vllt geht das komplett einfacher :zwinker: (*Stift Ende*) |
Re: MySQL Query
Eben weil Count etc. nicht in der Where-Klausel benutzt werden können, muss es in die Having-Klausel aufgenommen werden. Dann sollte es aber doch mit einem einzelnen Select funktionieren.
Aber mal 'ne andere Frage: was bewirkt denn überhaupt "count(*)-1+(n.lft>1)=X" bzw. was bedeutet das ">" in dieser Klausel? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 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