SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQL

MySQL Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQL diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 18.01.2017, 10:20:06
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
Tikiwiki befindet sich auf einem aufstrebenden Ast
CASE THEN Abfragen

Hallo Gemeinde,

ich hätte eine Problemstellung wozu ich Eure Hilfe benötige (falls das überhaupt so lösbar ist wie ich mir das vorstelle).

Ausgangssituation:
Jede Person muss 3 Aufgaben absolvieren und zu jeder Aufgabe werden Punkte vergeben.
Die Tabelle sieht folgend aus:
persID | f_aufgabeid | status_aufgabe
1 | 1 | 3
1 | 2 | 5
1 | 3 | 2

f_aufgabenid ist die Aufgabennummer 1-3
status_aufgabe ist die Punkteanzahl

Was will ich errreichen
Eine Art Pivot-Darstellung

persID | Aufgabe 1 | Aufgabe 2 | Aufgabe 3
1 | 3 | 5 | 2

Mein Versuch dies abzubilden ist folgender (und das ist anscheinend der falsche Weg)

PHP-Code:
SELECT persidvornamenachnamejahrf_aufgabenidstatus_aufgabe,
(CASE 
WHEN f_aufgabenid 1 THEN status_aufgabe END) AS Aufgabe_1,
(CASE 
WHEN f_aufgabenid 2 THEN status_aufgabe END) AS Aufgabe_2,
(CASE 
WHEN f_aufgabenid 3 THEN status_aufgabe END) AS Aufgabe_3,
FROM `aufgaben_person`
WHERE jahr '2016' 
Als Ausgabe bekomme ich folgende Struktur.

persid | vorname | nachname | jahr | f_aufgabenid | status_aufgabe | Aufgabe_1 | Aufgabe_2 | Aufgabe_3
1 | Max | Muster | 2016| 1 | 3 | 3 | NULL | NULL
1 | Max | Muster | 2016| 2 | 5 | NULL | 5 | NULL
1 | Max | Muster | 2016| 3 | 2 | NULL | NULL | 2

Auch ein SUM(CASE ... oder COUNT(CASE ... bringt nichts oder eines der Felder mit GROUP BY zu gruppieren hilft nichts.

Frage: Wie könnte eine mögliche SQL-Abfrage aussehen um das gewünschte Ergebnis zu erzielen (falls es möglich ist)?

Besten Dank im Voraus und hoffe die Aufgabenstellung ist nachvollziehbar für Euch.

lg
Dietmar
Mit Zitat antworten
  #2  
Alt 18.01.2017, 15:39:03
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.570
vt1816 hat die Renommee-Anzeige deaktiviert
vt1816 eine Nachricht über Skype™ schicken
AW: CASE THEN Abfragen

Hallo Dietmar,

versuches mal mit:
PHP-Code:
SELECT persidvornamenachnamejahr
(
SELECT status_aufgabe FROM  `aufgaben_personWHERE f_aufgabeid 1) AS Aufgabe_1,
(
SELECT status_aufgabe FROM  `aufgaben_personWHERE f_aufgabeid 2) AS Aufgabe_2,
(
SELECT status_aufgabe FROM  `aufgaben_personWHERE f_aufgabeid 3) AS Aufgabe_3
FROM 
`aufgaben_person`
GROUP BY persid
Ergibt:
Zitat:
persid vorname nachname jahr Aufgabe_1 Aufgabe_2 Aufgabe_3
1 Max Mustermann 2016 3 5 2
Verfeinerung mittels weiterer WHERE-Klauseln einfügen.

Hinweis für die Zukunft:
  • Dateistruktur bitte immer in maschienenlesbarer Form angeben - erspart den Helfenden den Nachbau
  • SQL Statments vor dem posten von Fehlern befreien
  • Jahreszahl sollte numerisch sein
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3  
Alt 19.01.2017, 14:17:09
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
Tikiwiki befindet sich auf einem aufstrebenden Ast
AW: CASE THEN Abfragen

Hallo vt1816,

erstmal danke für Deine geschätzte Antwort auf meinen Beitrag und ich werde in Zukunft Deine Anmerkung bez. Darstellung und Lesbarkeit berücksichtigen.

Grundsätzlich funktioniert Dein Vorschlag. Leider nur wen ich eine Person in der Tabelle habe. Wenn ich Deine Abfrage auf die Tabelle mit allen Daten (mehrere Personen mit Aufgaben und Punkten) umsetze bekomme ich eine Fehlermeldung

Code:
#1242 - Subquery returns more than 1 row
Du schreibst ich kann Verfeinerungen durch weitere WHERE-Klauseln machen. Nur wüsste ich nicht wo?

Hier nochmals den Tabellenaufbau und Testdaten

Code:
CREATE TABLE IF NOT EXISTS `testtabelle` (
  `idnr` int(11) NOT NULL AUTO_INCREMENT,
  `persid` int(11) NOT NULL,
  `f_aufgabeid` int(11) NOT NULL,
  `status_aufgabe` int(1) NOT NULL,
  PRIMARY KEY (`idnr`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;


INSERT INTO `testtabelle` (`idnr`, `persid`, `f_aufgabeid`, `status_aufgabe`) VALUES
(1, 1243, 1, 3),
(2, 1243, 2, 1),
(3, 1243, 3, 5),
(7, 4711, 1, 3),
(8, 4711, 2, 7),
(9, 4711, 3, 6);
Ich hoffe Du kannst Dich dieser Problematik nochmals annehmen.
Besten Dank
Dietmar
Mit Zitat antworten
  #4  
Alt 20.01.2017, 12:20:36
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
Tikiwiki befindet sich auf einem aufstrebenden Ast
AW: CASE THEN Abfragen

Hallo Gemeinde,

habe die Lösung meines Problems dann doch noch selbst lösen können.

Hier die Lösung:

Code:
SELECT idnr, persid, f_aufgabenid, status_aufgabe,
sum(CASE f_aufgabenid WHEN 1 THEN status_aufgabe ELSE 0 END) as Aufgabe_1,
sum(CASE f_aufgabenid WHEN 2 THEN status_aufgabe ELSE 0 END) as Aufgabe_2,
sum(CASE f_aufgabenid WHEN 3 THEN status_aufgabe ELSE 0 END) as Aufgabe_3
FROM `testtabelle`
GROUP BY persid
Somit für mich abgeschlossen.
Schönen Tag noch
Dietmar
Mit Zitat antworten
  #5  
Alt 26.01.2017, 16:13:10
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
Tikiwiki befindet sich auf einem aufstrebenden Ast
AW: CASE THEN Abfragen

Hallo Gemeinde,

ich muss dieses Thema noch einmal aufgreifen, da ich doch noch meine Schweirigkeiten habe ein vernünftiges SQL-Statement zusammen zu bauen.

Die SQL-Abfrage funktioniert und tut was ich möchte
Code:
SELECT idnr, persid, f_aufgabenid, status_aufgabe,
sum(CASE f_aufgabenid WHEN 1 THEN status_aufgabe ELSE 0 END) as Aufgabe_1,
sum(CASE f_aufgabenid WHEN 2 THEN status_aufgabe ELSE 0 END) as Aufgabe_2,
sum(CASE f_aufgabenid WHEN 3 THEN status_aufgabe ELSE 0 END) as Aufgabe_3
FROM `testtabelle`
GROUP BY persid
Ich möchte nun die Tabelle um das Feld "anmerkung" erweitern. Es sollen ja zu der Aufgabe und Punkte ev. Anmerkungen getätigt werden.

Wie könnte die SQL-Abfrage nun aussehen, dass ich dieses Feld in die bestehende integrieren kann?

Code:
SELECT idnr, persid, f_aufgabenid, status_aufgabe,
sum(CASE f_aufgabenid WHEN 1 THEN status_aufgabe ELSE 0 END) AS Aufgabe_1,
(CASE f_aufgabenid WHEN 1 THEN anmerkung ELSE '' END) AS Anmerkung_Aufgabe_1,
sum(CASE f_aufgabenid WHEN 2 THEN status_aufgabe ELSE 0 END) as Aufgabe_2,
(CASE f_aufgabenid WHEN 2 THEN anmerkung ELSE '' END) AS Anmerkung_Aufgabe_2,
sum(CASE f_aufgabenid WHEN 3 THEN status_aufgabe ELSE 0 END) as Aufgabe_3,
(CASE f_aufgabenid WHEN 3 THEN anmerkung ELSE '' END) AS Anmerkung_Aufgabe_3,
FROM `testtabelle`
GROUP BY persid
Dies funktioniert so nicht. Aber zur Erklärung wenn f_aufgabenid 1 ist und in den Anmerkungen was steht soll er dies anzeigen ansonsten eine leere Ausgabe.

Über eine Hilfestellung zu diesem Thema wäre ich Euch dankbar.
lg
Dietmar
Mit Zitat antworten
  #6  
Alt 01.02.2017, 09:59:34
Tikiwiki Tikiwiki ist offline
Anfänger
 
Registriert seit: Apr 2005
Beiträge: 115
Tikiwiki befindet sich auf einem aufstrebenden Ast
AW: CASE THEN Abfragen

Hallo,

das Problem besteht leider immer noch. Wenn man das zusätzliche Feld "Anmerkungen" in dieser Form der Abfrage, wie in den vorigen Posts beschrieben, nicht unterbringen kann, würde ich mich doch über andere Ansätze von Euch freuen.

Besten Dank
Dietmar
Mit Zitat antworten
Antwort

Stichworte
case then, kreuztabelle, pivot


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL] IF / CASE: mehrere Werte abfragen Zeussi MySQL 2 01.08.2009 16:44:53
URL verstecken und anderes JB PHP für Fortgeschrittene und Experten 9 14.06.2006 18:16:29
CASE THEN ELSE - Abfrage Tikiwiki MySQL 2 17.01.2006 12:42:00
Das soll nach 1 h ausgeführt werden! Spike15 PHP Grundlagen 12 04.04.2005 17:29:57
Weiterleitung in if-Schleife Chilla PHP für Fortgeschrittene und Experten 15 05.05.2004 20:19:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:27:40 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.


© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt