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

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

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


 

Aktuelle PHP Scripte

EJS TreeGrid ansehen EJS TreeGrid

EJS TreeGrid is DHTML component written in pure JavaScript to display and edit data in table, grid, tree view or grid with tree on HTML page

09.04.2019 coqsoft@ | Kategorie: JAVASCRIPT/ Components
Suchmaschine redaktionell, Branchenportal zum Geld verdienen

Programmbeschreibung Die Bezahl-Suchmaschine ist in Perl und PHP programmiert (eigenes CGI-Verzeichnis notwendig), benötigt PHP aber keine MySQL-Datenbank. Webmaster haben mit dieser Suchmaschine neben der normalen kostenlosen Registrierung von Lin

06.04.2019 skripte@ | Kategorie: PHP/ Suchmaschinen
Oog Photo-Video-Gallery

Mit Oog Photo-Gallery können Sie einfach und stilvoll Bilder (auch Video & Audio) auf Ihrem PHP5-Webserver veröffentlichen und verwalten. Lizenz: GNU GPL v2

06.04.2019 trottbrand@ | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:32 Uhr.