Select Abrage

Flooow

Mitglied
Guten Tag =)

Ich habe eine funktionierende Select Abfrage.

Mit Code:

Code:
$abfrage= Yii::app()->db->createCommand("SELECT  created_by, from_unixtime(created) FROM customer WHERE id >'3606'AND id < '4700' AND created_by ='Mustermann'");


//ausgabe aller Einträge
$dataReader=$abfrage->query();
$anzahl6 = 0; 
// Wiederholter Aufruf von read() bis false zurückgegeben wird
while(($row=$dataReader->read())!==false) {
    echo "<tr>";
        $anzahl6++;
   
    
     // Mit foreach wird jede Datenzeile durchlaufen       
foreach($row as $wert) {

echo " <td>$wert</td>";
 
        }
        
        
}
 
 
echo "</table>";

//Ausgabe Einträge

echo "<b>Mustermann Kunden/Jahr:</b>".$anzahl6."<br>";

Sie gibt mir aus :

Mustermann Kunden/Jahr : 350

Ich hab nun jedoch noch mehr created_by einträge, bei welchen auch jeweils die Anzahl und der Name ausgegeben werden soll. Ich habs mir GROUP BY versucht, jedoch ohne Erfolg.

Versuch:
Code:
$abfrage= Yii::app()->db->createCommand("SELECT  created_by, from_unixtime(created) FROM customer WHERE id >'3606'AND id < '4700' GROUP BY created_by");


//ausgabe aller Einträge
$dataReader=$aden3->query();
$anzah6 = 0; 
// Wiederholter Aufruf von read() bis false zurückgegeben wird
while(($row=$dataReader->read())!==false) {
    echo "<tr>";
        $anzahl6++;
   
    
     // Mit foreach wird jede Datenzeile durchlaufen       
foreach($row as $wert) {
    
    echo " <td>$wert</td>";
           
        }
        
        
}

//Ausgabe Einträge

//ich weiß es nicht
echo "<b>Kunden/Jahr:</b>".$anzahl6."<br>";

Gibt eine richtige Ausgabe, jedoch ohne die Anzahl der Einträge

Mustermann
Max
Harald


Meine Vorstellung wäre:

Mustermann Kunden/Jahr : 350
Max Kunden/Jahr : 444
Harald Kunden/Jahr : 555

Könnt ihr mir vielleicht helfen?

danke sehr =)
 
Zuletzt bearbeitet:
Da Group-By die Datensätze zusammenfasst, geht das so nicht. Du kannst das Du könntest mit der SQL-Funktion COUNT() arbeiten.
 
Select Abfrage

Guten Abend =)

Vor ein Paar Tagen hatten wir das Thema schon, jedoch muss ich unbedingt den Fehler wissen.


Code:
$aden4= Yii::app()->db->createCommand
("SELECT  created_by, DATE_FORMAT
(created,'%M')AS month, FROM_UNIXTIME
(created), COUNT(created_by) AS anzahl
FROM customer WHERE id >'3606'AND id < '4700'
GROUP BY created_by, month ORDER BY month ASC, created_by ASC");

Das ist meine Abfrage

Die Ausgabe ist:

Max January 3 Einträge
Ute January 2 Einträge
Mustermann February 1 Einträge

jedoch sind zwischen id >'3606'AND id < '4700' viel mehr EInträge vorhanden.

Seht Ihr den Fehler ?

Danke!
 
Ja, ich seh den Fehler. Bekomm ich was?

Öhm, warum fängst du wegen dem gleichen Thema noch einen Thread an?

Zur Frage: Lass das Group-By weg, dann sollte die Anzahl stimmen.
 
Wenn ich das Group_By weglasse kommt der Error das man count nicht ohne Group_by Anweisung verwenden kann..
 
Zuerst dan ganzen Grunsch mal formatieren damit man ihn überhaubt lesen kann
SQL:
SELECT  
	created_by, 
	DATE_FORMAT(created,'%M') AS month, 
	FROM_UNIXTIME(created), 
	COUNT(created_by) AS anzahl
FROM 
	customer 
WHERE 
	id >'3606'AND id < '4700'
GROUP BY 
	created_by, 
	month 
ORDER BY 
	month ASC, 
	created_by ASC
Wieviele Einträge müssten denn ausgegeben werden?
Was macht FROM_UNIXTIME(created)? crerated ist doch ein Date-Format, sonst könntest du nicht DATE_FORMAT() darauf anwenden
 
Zuletzt bearbeitet von einem Moderator:
sind round about 500 Einträge.

Zur Übersicht:

PHP:
$aden4= Yii::app()->db->createCommand("SELECT  created_by, date_format(created,'%M')AS month, count(created_by) AS anzahl FROM customer WHERE id >'3606'AND id < '10000' GROUP BY month ASC, created_by");


//ausgabe aller Einträge
$dataReader=$aden4->query();

// Wiederholter Aufruf von read() bis false zurückgegeben wird
while(($row=$dataReader->read())!==false) {
   
   }
    echo "<tr>";
    
     // Mit foreach wird jede Datenzeile durchlaufen       
foreach($row as $nargel) {
    
    echo " <td>$nargel</td>";
           
        
        
        
}
 
 
echo "</table>";

}
?>
 
item: Du vergleichst die ID als String. Das ist nicht besonders von Vorteil. Wenn ud die ID auch noch als String in der DB hinterlegt hat, dann machst du ein Stringvergleich. Das führt zu ganz anderen Resultaten
2 ist kleiner wie 10 => '2' ist grösser wie '10'

item: du solltest den <tr> auch wieder schliessen

item: COUNT(feld) zählt nur Nicht-Null Werte des Feldes. Wenn du leere created_by-Einträge hast, dann solltes du COUNT(*) verwenden
 
Es sind keine Leeren Einträge vorhanden.

Das mit der id, naja wie soll ichs sagen, ich weiß nicht wie ich n Datumszeitraum mach, deshalb hatte ich einfach in der DB geguckt welche id am nähesten an meinem Startzeitpunkt dran ist. (id 3606).

Sonst gibt es keinen Fehler in meiner Abfrage der das grob beeinflusst hat, das nichma 1% der Daten gesucht/ausgegeben werden?

Derzeitige Ausgabe:
Peter. . 1. Einträge
Aden. . 124. Einträge
Max. . 134. Einträge
Mustermann. . 256. Einträge
Gert. . 1. Einträge
Chris. . 88. Einträge
Peteeee. February. 2. Einträge
Mustermann. February. 1. Einträge
Mustermann. January. 3. Einträge
Mustermann. March. 1. Einträge

Ich sehe ja das am anfang die gesamten Einträge gefunden werden, jedoch gibt er mir halt nicht alle mit dem Monat aus..
 
Wie siehst du dass er dir am Anfang alle Datensätze ausgibt?
Und in welchem Format ist die ID nun in der DB gespeichert?
 
Zurück