AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL Query

Ein Thema von Baeuerle · begonnen am 28. Mär 2007 · letzter Beitrag vom 30. Mär 2007
Antwort Antwort
Baeuerle

Registriert seit: 17. Mär 2005
Ort: Ettenheim
283 Beiträge
 
Delphi 2005 Professional
 
#1

MySQL Query

  Alt 28. Mär 2007, 19:57
Datenbank: MySQL • Version: 3.23.58 • Zugriff über: ZEOS
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
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: MySQL Query

  Alt 30. Mär 2007, 10:11
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:
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
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.
  Mit Zitat antworten Zitat
Baeuerle

Registriert seit: 17. Mär 2005
Ort: Ettenheim
283 Beiträge
 
Delphi 2005 Professional
 
#3

Re: MySQL Query

  Alt 30. Mär 2007, 13:10
Danke für deine Antwort:

zu 2) In der where-klausel können keine aggregatfunktionen wie count(), sum()... benutzt werden!!!
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: MySQL Query

  Alt 30. Mär 2007, 14:04
Ich versteh zwar nicht um was es geht, aber so in etwa würds ich machen:

SQL-Code:
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
//Edit: ungetestet
//Edit2: kannst du sagen um was es geht? Vllt geht das komplett einfacher (*Stift Ende*)
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: MySQL Query

  Alt 30. Mär 2007, 16:42
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?
  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 13:36 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