php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 13-05-2013, 22:23
Danusus
 Registrierter Benutzer
Links : Onlinestatus : Danusus ist offline
Registriert seit: May 2006
Ort: GB - Newcastle
Beiträge: 24
Danusus ist zur Zeit noch ein unbeschriebenes Blatt
Standard Mehrere Unions sollen auf subquery zugreifen

Hallo Zusammen,

Habe eine Subquery und moechte diese mehrmals mit Union gruppieren um verschiede Summen vorher auszugeben.
Problem: Innerhalb jeder Union muss ich dieselbe Query mit den Details angeben.
Kann stattdessen nicht von allen UNION-Teilen auf eine allgemein gueltige Query zugegriffen werden?
Bzw. gibt es einen komplett anderen Loesungsansatz?

Ausgabe soll also z.B. sein (basierend auf 2 x Union):
**************************************************
Peter 28 //Summiert und gruppiert auf Name
Jack 12
Nora 34

Montag: 4 //Summiert und gruppiert auf Wochentag
Dienstag:2
Mittwoch:1

Peter Montag 20 //Einzelne Datensaetze
Peter Mittwoch 8
Jack Montag 8
Jack Dienstag 4
Nora Montag 5
Nora Montag 5
Nora Dienstag 24

******************************************
Folgende Query funktioniert (Um zu vereinfachen sind einige Zeilen entnommen, kann also sein dass einige Fehler vorhanden sind. Es geht ja nur ums Prinzip) Frage also --> Wie kann man es umgehen die select qry nach FROM immer wiederholen zu muessen?:
*****************************************
// Die Query die die Summe auf Groupierung MName bildet
Select MName, sum(Pts1)
From
(
SELECT 'A'&format(inDateTime,'YYYYMMDD HH:mm:ss') as Qsort,
m.Membername as MName,
e.format(inDateTime,'ddd') as Day,
e.EntryPaid * 2 as Pts1
from Entries e
left join members m on m.MemNo = e.MemNo
where year(e.inDateTime) = 2012
)
Group by MName

UNION


// Die Query die die Summe auf Groupierung Day bildet
Select Day, sum(Pts1)
From
(
SELECT 'B'&format(inDateTime,'YYYYMMDD HH:mm:ss') as Qsort,
m.Membername as MName,
e.format(inDateTime,'ddd') as Day,
e.EntryPaid * 2 as Pts1
from Entries e
left join members m on m.MemNo = e.MemNo
where year(e.inDateTime) = 2012
)
Group by Day

UNION

// Die Query mit den Details (Beispielsweise alle Datensaetze)
// --> Hierauf sollten die Selects der anderen Unions zugreifen, das geht
// aber meines wissens nach nicht. Was waere daher eine Alternative?
SELECT 'C'&format(inDateTime,'YYYYMMDD HH:mm:ss') as Qsort,
m.Membername as MName,
e.format(inDateTime,'ddd') as Day,
e.EntryPaid * 2 as Pts1
from Entries e
left join members m on m.MemNo = e.MemNo
where year(e.inDateTime) = 2012

Sort by Qsort

**************************************
Also anstatt das obene angegebene eben sowas aehnliches wie unten (Ziel ist also zu verhindern, dass das select statement immer wieder kopiert werden muss):
****************************************
Select sum(Pts1)
From
( DIE-UNTERQUERY)
Group by MName

UNION

Select sum(Pts1)
From
( DIE-UNTERQUERY)
Group by Day

UNION

DIE-UNTERQUERY
Sort by Qsort

Hoffe das ist zu verstehen!...

Gruss
D
Mit Zitat antworten
  #2 (permalink)  
Alt 21-05-2013, 15:36
Benutzerbild von Yaslaw Yaslaw
 Registrierter Benutzer
Links : Onlinestatus : Yaslaw ist offline
Registriert seit: May 2013
Beiträge: 13
Yaslaw befindet sich auf einem aufstrebenden Ast
Standard

Als erstes kannst du dein Subquery mal reduszieren.
Code:
-- Dein SQL 
Select Day, sum(Pts1)
From
(
SELECT 'B'&format(inDateTime,'YYYYMMDD HH:mm:ss') as Qsort,
m.Membername as MName,
e.format(inDateTime,'ddd') as Day,
e.EntryPaid * 2 as Pts1
from Entries e
left join members m on m.MemNo = e.MemNo
where year(e.inDateTime) = 2012
)
Group by Day
-- Lässt sich zu dem folgenden reduzieren
SELECT 
    format(e.inDateTime,'ddd') AS Day,
    SUM(e.EntryPaid * 2) AS Pts1
FROM 
    entries e
WHERE 
    year(e.indatetime) = 2012
Group by
    Day
Aber zurück zu deiner Frage. Ändere die Reihenfolge. Zuerst den UNION und dann den GROUP BY
Code:
SELECT
    value,
    SUM(pts1) AS pts1
FROM
    (
        -- Nach Name
        SELECT
            m.membername as mname AS value,
            e.entrypaid * 2 as pts1
        FROM 
            entries e
            LEFT JOIN members m 
            ON m.memno = e.memno
        WHERE 
            YEAR(e.indatetime) = 2012
        UNION ALL
        -- Nach Wochentag
        SELECT 
            format(e.inDateTime,'ddd') AS value,
            SUM(e.EntryPaid * 2) AS Pts1
        FROM 
            entries e
        WHERE 
            year(e.indatetime) = 2012
        Group by
            Day
    )
GROUP by    
    value
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Auf ID zugreifen? PHPler HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 1 11-03-2009 05:19
Wie Scripte verwalten, die auf Page angezeigt werden sollen? carapau BRAINSTORMING PHP/SQL/HTML/JS/CSS 5 09-01-2009 23:21
Auf Array zugreifen hasch PHP Developer Forum 5 03-04-2006 21:55
OOP - auf mehrere Klassen zugreifen lx-club PHP Developer Forum 1 16-11-2005 15:21
2 Programme sollen auf eine gemeinsame Nutzerdb zugreifen ragi SQL / Datenbanken 4 11-01-2002 18:37

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:55 Uhr.