Zuweisen und abändern von Ausgabe

Flooow

Mitglied
Mein Projekt ist fast fertig und danach geb ich mir erstma einige Php und MySql Tutorials damit ich hier nich immer fragen muss.


Code:
$aden3= Yii::app()->db->createCommand("SELECT  created_by, date_format(FROM_UNIXTIME(created),'%M')as Monat, count(created_by) AS anzahl FROM customer WHERE id > 3607 AND id < 10000 and created_by = 'Mustermann' GROUP BY  Monat ASC, created_by");
$dataReader=$aden3->query();


 
// Wiederholter Aufruf von read() bis false zurückgegeben wird
while(($row=$dataReader->read())!==false) {
    

   
            
// Mit foreach wird jede Datenzeile durchlaufen
foreach($row as $dingeel) {
   
    echo " <td>$dingeel</td>";
   
   
        }
        echo "</tr>";
}

Ausgabe ist:

Mustermann January 37
Mustermann February 89
Mustermann March 31

Damit die Einträge nebeneinander stehen muss ich ja einfach das

Code:
 echo "</tr>";

rausnehmen.

Aber wie bekomme ich es hin das Mustermann nur einmal ausgegeben wird und danach die drei Anzahlen kommen?

Ich schreibe alles in eine Tabelle

Code:
echo "<td><b>Name:</b></td>";
echo "<td><b>Januar:</b></td>";
echo "<td><b>Februar:</b></td>";
echo "<td><b>Maerz:</b></td>";
echo "<td><b>April:</b></td>";
echo "<td><b>Mai:</b></td>";
echo "<td><b>Juni:</b></td>";
echo "<td><b>Juli:</b></td>";
echo "<td><b>Aug.:</b></td>";
echo "<td><b>Sep.:</b></td>";
echo "<td><b>Okt.:</b></td>";
echo "<td><b>Nov.:</b></td>";
echo "<td><b>Dez.:</b></td>";

Ist es möglich beispielsweise die January Einträge in Januar zu machen, die February Einträge direkt in Februar usw.?

Das es möglichst so aussieht :
Code:
                           Januar                Februar                  März     

Mustermann             37                      89                       31
Wenn ihr was zum nachlesen hättet, oder mir zeigen könntet wie das funktioniert, wäre ich euch sehr dankbar =)
 
Zuletzt bearbeitet:
Am Enifqchsten bereits im SQL.
Dzu muss man deines makl formatieren (ich würde es auch formatiert im PHP-Code schreiben, es ist dann lesbar).
SQL:
SELECT  
	created_by, 
	date_format(FROM_UNIXTIME(created),'%M')as Monat, 
	count(created_by) AS anzahl 
FROM 
	customer 
WHERE 
	id > 3607 AND id < 10000 
	AND created_by = 'Mustermann' 
GROUP BY  
	Monat ASC, 
	created_by
Und nun wollen wir das ganze umstellen, so dass pro Monat ein Feld da steht. Für den Vergleich ist die Monatsnummer besser als den Monatsname. Darum nehmen wir diesen. Den vergleichen wir mit einer Monatsnummer. Nun nehmen wir nicht den COUNT(), sondern die Summe. Ist der Vergleich positiv (true) wird er aufsummiert. Wenn nicht, dann nicht.
SQL:
SUM(IF(MONTH(FROM_UNIXTIME(created))=4, 1, 0)) AS April
Da TRUE von MySQL als 1 gerechnet und FALSE als 0 gerechnet wird, können wir IF() weglassen
SQL:
SUM(MONTH(FROM_UNIXTIME(created))=4) AS April

Das ergibt dann das folgende Query, in welchem jeder MOant eine Spalte ist.
SQL:
SELECT
	created_by,
	SUM(MONTH(FROM_UNIXTIME(created))=1) AS Januar,
	SUM(MONTH(FROM_UNIXTIME(created))=2) AS Februar,
	SUM(MONTH(FROM_UNIXTIME(created))=3) AS Maerz,
	SUM(MONTH(FROM_UNIXTIME(created))=4) AS April,
	-- TODO: genauso weiter ergänzen bis Dezember	
FROM
	customer 
WHERE 
	id > 3607 AND id < 10000 
	AND created_by = 'Mustermann' 
GROUP BY  
	created_by
ORDER BY 
	created_by ASC
 
Zuletzt bearbeitet von einem Moderator:
hmm ich bekomm da noch n error

Beschreibung

PHP:
Beschreibung

CDbCommand konnte das SQL-Statement nicht ausführen: SQLSTATE[HY000]: General error: 1305 FUNCTION webspot.Monat does not exist


Hatte es mit einem Monat ausprobiert.

PHP:
SELECT 
 created_by, SUM(Monat(FROM_UNIXTIME(created))=1) AS Januar
 FROM
 customer 
WHERE id > 3607 AND id < 10000 and created_by = 'rhaslinger' 
GROUP BY 
 created_by
 ORDER BY
 created_by ASC
 
Zuletzt bearbeitet:
Nuja, wenn du MONAT() in der MySQL-Doku als MySQL-Befehl findest, darfst du das gerne so nehmen. In meiner heisst der Befehl MONTH().
Warum nimmst du den Befehl nicht so wie ich ihn geschrieben habe und erfindest einen neuen, der zuerst in MySQL implementiert werden müsste?
Also viel einfacher kann ich es dir wirklich nicht machen.
Ich gebs glaub auf.
 
neeeeeein so war das nicht gemeint.

Ich hab nur n moment gebraucht um zu merken das das n MySql-Befehl is :D

war in keinster weise böse gemeint.
 
Hinterfragen ist schon gut. Und die Befehle die man nicht kennt ein wenig austesten ist sehr gut.
 
besteht eig. auch eine möglichkeit, die ausgegeben namen (da bei mir in der DB alle mit Kürzel sind) im nachhinein bevor es ausgegeben wird umzubennen?

z.B
M.M 33 Einträge
ändern in

Max Mustermann 33 Einträge

ist das möglich?
 
Zurück