php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.01.2012, 22:30  
Neuer Benutzer
 
Registriert seit: 17.01.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
upnay befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Prozent-Spalte erzeugen über zwei Tabellen aber nicht allen Zeilen

Hallo,

bin zwar nicht mehr ganz neu im Bereich PHP und MySQL kommen mit folgender mysql-Abfrage aber nicht zum Ziel. Ich versuche es mal in Kurzform:

Nutze zwei Tabellen:

Tabelle: 'thema'




Tabelle: 'daten_plan'




Mit folgender MySQL-Abfrage lese ich die Daten aus 'plan_daten' und 'thema aus und füge diese Daten zusammen.

Code:
SELECT
  plan_daten.id, 
  plan_daten.position,
  plan_daten.tag,
  thema.id thema_id,
  thema.titel thema_titel,
  thema.soll_minuten thema_soll_minuten,
  thema.details thema_details,

  (SELECT
    ROUND(thema_soll_minuten * 100 / SUM(thema.soll_minuten), 2) 
  FROM 
    plan_daten, thema
  WHERE 
    plan_daten.thema = thema.id) thema_prozent

FROM 
  plan_daten
LEFT JOIN 
  thema 
  ON (plan_daten.thema = thema.id)
WHERE plan_daten.id = 1;
(Die '1' wird beim Aufrufen der Abfrage dynamisch als $id übergeben.)

Diese Anfrage erzeugt eine zusätzliche Spalte 'thema_prozent' in der angegeben ist, wieviel Prozent der Wert aus 'thema.soll_minuten' im Bezug zur gesamten Spalte 'thema.soll_minuten' hat.
Damit bekomme ich das Ergebnis:




Nun möchte ich aber das der Prozentwert nicht über die komplette Spalte 'thema.soll_minuten' bestimmt wird, sonder nur über die jeweiligen Zeilen die zu einem bestimmten Tag gehören. Der jeweilige Tag ist in der Spalte 'tag' in der Tabelle 'plan_daten' angegeben.

Ich denke, dass ich das mit bestimmt mit 'group by' lösen kann. Allerdings habe ich keine Idee, wo ich dies in der Abfrage einbauen kann/muss.

Ich hoffe das war halbwegs verständlich, ansonsten einfach noch einmal nachfragen.


Vielleicht hat ja hier jemand eine Hilfestellung/Lösung für mich.

Vielen Dank schon einmal...

René
upnay ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.01.2012, 23:02  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 681
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

mal abgesehen davon, daß die o.a. Abfrage niemals das u.a. Ergebnis ausgibt,
probier das:

PHP-Code:
SELECT
  plan_daten
.id
  
plan_daten.position,
  
plan_daten.tag,
  
thema.id thema_id,
  
thema.titel thema_titel,
  
thema.soll_minuten thema_soll_minuten,
  
thema.details thema_details,
  
ROUND(100*thema.soll_minuten / (SELECT sum(soll_minutenWHERE id 1 GROUP BY tag ),2) as  prozente
FROM 
  plan_daten
LEFT JOIN 
  thema 
  ON 
(plan_daten.thema thema.id)
WHERE plan_daten.id 1
Harry_X ist offline   Mit Zitat antworten
Alt 18.01.2012, 00:11  
Neuer Benutzer
 
Registriert seit: 17.01.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
upnay befindet sich auf einem aufstrebenden Ast
Standard Syntax-Fehler

Hallo Harry_X,

vielen Dank für die superschnelle Antwort. Leider bekomm ich in der Zeile:

Zitat:
ROUND(100*thema.soll_minuten / (SELECT sum(soll_minuten) WHERE id = 1 GROUP BY tag ),2) as prozente
immer einen Syntax-Fehler:

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1 GROUP BY tag ),2) as prozente
FROM
plan_daten
LEFT JOIN
' at line 9"


Zum Code noch eine Frage: Handelt es sich bei der 'id' in "...WHERE id = 1..." um die 'id' aus der Tabelle 'thema' oder 'plan_daten'. Nach meinem Verständnis müßte es die 'id' aus 'plan_daten' sein. Ist das korrekt?

Vielen Dank und beste Grüße

René
upnay ist offline   Mit Zitat antworten
Alt 18.01.2012, 00:41  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von upnay Beitrag anzeigen
vielen Dank für die superschnelle Antwort. Leider bekomm ich in der Zeile:
Im Subselect fehlt die Tabelle.
  Mit Zitat antworten
Alt 18.01.2012, 01:23  
Neuer Benutzer
 
Registriert seit: 17.01.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
upnay befindet sich auf einem aufstrebenden Ast
Standard

Hallo meikel,

vielen Dank. Habs probiert. Nun ist der Syntax-Fehler weg, aber er rechnet nicht richtig. Ich habe noch einmal den Code etwas reduziert, damit es übersichtlicher wird:

Code:
SELECT
  plan_daten.id,
  plan_daten.tag,
  thema.soll_minuten thema_soll_minuten,
  (SELECT sum(soll_minuten) FROM thema GROUP BY tag ) as  summe
FROM
  plan_daten
LEFT JOIN
  thema
  ON (plan_daten.thema = thema.id)
WHERE plan_daten.plan_id = 1;
Leider bekomme ich nun eine Spalte 'prozent' wo in jeder Zeile die komplette Summe der Spalte 'soll_minuten' steht. Die Spalte 'tag' wird nicht berücksicht. Es sollte so sein:



Danke und Gruß

René
upnay ist offline   Mit Zitat antworten
Alt 18.01.2012, 09:02  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 681
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

aus dem Select kommt bestimmt keine Spalte "prozent".
id = 1? hast du doch selbst geschrieben:
Zitat:
wird beim Aufrufen der Abfrage dynamisch als $id übergeben
und die fehlt im Subselect natürlich prompt
Harry_X ist offline   Mit Zitat antworten
Alt 18.01.2012, 10:28  
Neuer Benutzer
 
Registriert seit: 17.01.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
upnay befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

vielen Dank für die Unterstützung und Denkanstöße. Ich habe nun eine Lösung gefunden, mit der ich das gewünschte Ergebnis erziele:

Code:
SELECT
  plan_daten.id,
  plan_daten.position,
  plan_daten.tag,
  thema.id thema_id,
  thema.titel thema_titel,
  thema.soll_minuten,

  plan_daten.tag t_check,
  ROUND(thema.soll_minuten * 100 / (SELECT sum(soll_minuten)
    FROM plan_daten,thema
    WHERE plan_daten.thema = thema.id AND plan_daten.tag = t_check
    GROUP BY plan_daten.tag), 2) as thema_prozent,

  thema.details thema_details
FROM
  plan_daten
LEFT JOIN
  thema
ON
  plan_daten.thema = thema.id
WHERE plan_daten.id = $id;
Hierbei lasse ich nun eine "Hilfsspalte" 't_check' erzeugen.

Ergebnis:




Aber ich denke, dass man da bestimmt noch etwas optimieren kann, oder?
Vielleicht kann jemand von Euch noch einmal drüber schauen.

Vielen Dank und beste Grüße

René
upnay ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Update einzelner Zeilen aus mehreren Tabellen mette Datenbanken 2 19.09.2011 14:38
[Erledigt] (Dynamischer) DELETE über mehrere Tabellen seb_ Datenbanken 7 29.05.2011 20:19
Tabellen erzeugen (fPDF) 22hase PHP Tipps 2010 4 17.02.2010 09:06
gelöst: Datenbankabfrage über 3 Tabellen lord_icon Datenbanken 0 12.10.2009 00:38
RegEx - HTML über mehrere Zeilen matchen nextgate PHP Tipps 2009 13 05.08.2009 12:20
Query über mehrere Tabellen ph|L Datenbanken 3 07.04.2009 14:26
[Erledigt] Select über zwei Tabellen / Performanceproblem Wolla Datenbanken 20 15.06.2008 00:58
Tabellen kopieren ohne bestimmte Zeilen HaraDej Datenbanken 2 01.08.2007 15:49
Update über zwei Tabellen tekknotrip Datenbanken 2 26.02.2007 16:25
Zeilen aus mehreren Tabellen löschn mit Bezug auf eine Table Riks Datenbanken 3 25.02.2007 20:17
Select über zwei Tabellen danix-dj PHP Tipps 2006 11 22.05.2006 15:13
3 Tabellen verbunden -- Ausgabe in einer Spalte Datenbanken 4 06.09.2005 10:43
suche über 8 tabellen PHP Tipps 2004 3 03.09.2004 12:48
Abfrage über 3 Tabellen PHP Tipps 2004 3 31.07.2004 22:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
spalten tabelle erstellen, mysql select mehrere tabellen alle zeilen, php mysql ausgabe tabelle, prozent abfrage, group by prozente, spalten php erzeugen, mysql prozent spalte

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:36 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum