sql hierachisch darstellen

sql hierachisch darstellen

am 10.04.2006 14:01:04 von sts-nospam

Hallo,
gibt es eine standardisierte Methode um eine SQL-Query hierachisch
darzustellen. Ich arbeite im Bereich der Sprachinterpretation und möchte
die hierachischen SQL-Anweisungen für einen Algorithmus trainieren.

Re: sql hierachisch darstellen

am 10.04.2006 20:44:03 von Dominik Echterbruch

Stefan Schwärzler wrote:
>
> gibt es eine standardisierte Methode um eine SQL-Query hierachisch
> darzustellen. Ich arbeite im Bereich der Sprachinterpretation und möchte
> die hierachischen SQL-Anweisungen für einen Algorithmus trainieren.

Es hat zwar genau genommen nichts mit MySQL zu tun und ich wußte auch
noch nicht, daß SQL-Abfragen lernfähig sind, aber die Neugier zwingt mich ;)

Was genau stellst du dir da vor? Ich habe im Moment keine genaue Idee,
inwiefern du eine Abfrage hierarchisch darstellen möchtest. Die
Beziehung der Tabellen im FROM-Teil?
Hast du evtl. ein Beispiel, wie sowas aussehen _könnte_?


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: sql hierachisch darstellen

am 11.04.2006 14:55:49 von Harald Stowasser

Stefan Schwärzler schrieb:
> Hallo,
> gibt es eine standardisierte Methode um eine SQL-Query hierachisch
> darzustellen. Ich arbeite im Bereich der Sprachinterpretation und
> möchte die hierachischen SQL-Anweisungen für einen Algorithmus
> trainieren.

Kann mir nicht vorstellen was genau du da meinst. Ich denke du meinst
die Formatierung um eine Query lesbar darzustellen?
Ich rücke zusammengehörende Blöcke ein. Bei größeren Querys schreibe ich
sogar Terme untereinander. Reservierte Wörter werden groß geschrieben.

Das sieht dann etwa so aus:

SELECT m1.mannschaft AS heim
,m2.mannschaft AS gast
,m1.mannschaft_id AS heim_id
,m2.mannschaft_id AS gast_id
,s.spiel_id AS spiel_id
,if(m1.mannschaft_id=m2.mannschaft_id,'X',
if (s.tore_heim IS NOT NULL,
CONCAT(s.tore_heim,':',s.tore_gast),'-')
) AS ergebnis
,n.nachrichten_id AS nachrichten_id
,CONCAT(m1.sortiername,m1.mannschaft_id) AS sort1
,CONCAT(m2.sortiername,m2.mannschaft_id) AS sort2
FROM r_mannschaft_liga r1,r_mannschaft_liga r2
LEFT JOIN mannschaften m1
ON r1.fk_mannschaft_id=m1.mannschaft_id
LEFT JOIN mannschaften m2
ON r2.fk_mannschaft_id=m2.mannschaft_id
LEFT JOIN spiele s
ON r1.fk_liga_id =s.fk_liga_id
AND r1.fk_mannschaft_id=s.fk_heim_mannschaft_id
AND r2.fk_mannschaft_id=s.fk_gast_mannschaft_id
AND s.status ='aktiv'
LEFT JOIN content.nachrichten n ON s.spiel_id=n.fk_spiel_id
WHERE r1.fk_liga_id =
AND r2.fk_liga_id =
ORDER BY sort1,sort2,s.spiel_id



Oder so:


SELECT mannschaft_id
,mannschaft
,IFNULL(SUM(s1.punkte_heim),0)
+IFNULL(SUM(s2.punkte_gast),0)
+IFNULL(SUM(k.punkte),0)
AS punkte
,IFNULL(SUM(s1.minuspunkte_heim),0)
+IFNULL(SUM(s2.minuspunkte_gast),0)
+IFNULL(SUM(k.minuspunkte),0)
AS minuspunkte
,COUNT(s1.FK_heim_mannschaft_id)
+COUNT(s2.FK_gast_mannschaft_id)
+IFNULL(SUM(k.spiele),0)
AS anzahl
,IFNULL(SUM(s1.tore_heim),0)
+IFNULL(SUM(s2.tore_gast),0)
+IFNULL(SUM(k.tore),0)
AS tore
,IFNULL(SUM(s1.tore_gast),0)
+IFNULL(SUM(s2.tore_heim),0)
+IFNULL(SUM(k.gegentore),0)
AS drin
,SUM(if(s1.tore_heim > s1.tore_gast,1,0))
+SUM(if(s2.tore_gast > s2.tore_heim,1,0)) AS siege
,SUM(if(s1.tore_heim < s1.tore_gast,1,0))
+SUM(if(s2.tore_gast < s2.tore_heim,1,0)) AS verloren
,SUM(if(s1.tore_heim = s1.tore_gast,1,0))
+SUM(if(s2.tore_gast = s2.tore_heim,1,0)) AS unentschieden
,( IFNULL(SUM(s1.tore_heim),0)
+IFNULL(SUM(s2.tore_gast),0)
+IFNULL(SUM(k.tore),0)
)-(IFNULL(SUM(s1.tore_gast),0)
+IFNULL(SUM(s2.tore_heim),0)
+IFNULL(SUM(k.gegentore),0)
) AS differenz
,SUM(if(s1.tore_heim > s1.tore_gast,1,0)) AS heim_siege
,SUM(if(s2.tore_gast > s2.tore_heim,1,0)) AS gast_siege
,SUM(if(s1.tore_heim < s1.tore_gast,1,0)) AS heim_verloren
,SUM(if(s2.tore_gast < s2.tore_heim,1,0)) AS gast_verloren
,SUM(if(s1.tore_heim = s1.tore_gast,1,0)) AS heim_unentschieden
,SUM(if(s2.tore_gast = s2.tore_heim,1,0)) AS gast_unentschieden
FROM mannschaften
,r_mannschaft_liga AS r
,spieltage AS st1
LEFT JOIN korrekturen AS k
ON k.FK_mannschaft_id = mannschaften.mannschaft_id
AND k.FK_spieltag_id = st1.spieltag_id
AND k.FK_liga_id =
LEFT JOIN spiele AS s1
ON s1.FK_heim_mannschaft_id = mannschaften.mannschaft_id
AND s1.FK_spieltag_id = st1.spieltag_id
AND s1.status = 'aktiv'
AND s1.punktevergabeart != 'abgebrochen'
AND s1.punktevergabeart != 'ausgefallen'
AND s1.punktevergabeart != 'verschoben'
AND s1.punktevergabeart != 'verlegt'

LEFT JOIN spiele AS s2
ON s2.FK_gast_mannschaft_id = mannschaften.mannschaft_id
AND s2.FK_spieltag_id = st1.spieltag_id
AND s2.status = 'aktiv'
AND s2.punktevergabeart != 'abgebrochen'
AND s2.punktevergabeart != 'ausgefallen'
AND s2.punktevergabeart != 'verschoben'
AND s2.punktevergabeart != 'verlegt'

WHERE st1.FK_liga_id =
AND r.FK_liga_id =
AND st1.spieltag_id <=
AND r.FK_mannschaft_id = mannschaften.mannschaft_id
GROUP BY mannschaft_id,mannschaft
ORDER BY punkte DESC
,minuspunkte DESC
,differenz DESC
,tore DESC
,drin ASC
,anzahl ASC
,mannschaft