2012-04-08 5 views
3

Code eingeben here haben eine Woche versucht, dies herauszufinden, haben es etwas funktioniert durch die Kombination von Dingen aus verschiedenen Quellen, aber noch nicht funktioniert.Customer Lifetime-Wert mit Mysql PHP

ich habe im Grunde eine Auftrag Tabellen und ich zu einer Gruppe Kunden versuche mit ihrem ersten Bestelldatum, und zeigt die Gesamt von dieser Gruppe verbrachten bisher

dies meine SQL-Abfrage ist:

SELECT DISTINCT email, billing_name, 
FORMAT(SUM(total),2) AS total, 
DATE_FORMAT(MIN(orderdate), '%Y-%m') AS firstorder, 
DATE_FORMAT(MAX(orderdate), '%Y-%m') AS lastorder 
FROM orders 
GROUP BY email 
ORDER BY firstorder ASC 

und mit php tue ich:

$rows = array(); 
while($row = mysql_fetch_array($query)) 
$rows[] = $row; 
foreach($rows as $row) { 
    $currMonth = $row['firstorder']; 
    $total += $row['total']; 
    if ($currMonth != $prevMonth) { 
      echo $currMonth.' = $'.$total'; 
      $prevMonth = $currMonth; 
      $total = 0; 
     } 
    } 

dies wie mir eine Liste gibt:

2010-05 = $230.49 
    2010-06 = $557.32 
    2010-08 = $223.38 

aber die Zahlen addieren sich nicht, was mache ich falsch? und wie kann ich anzeigen, wie viel eine Gruppe in anderen Monaten verbracht hat? das ist, wie ich schließlich die daten zeigen möchte, http://www.quickcohort.com/

bitte hilfe! Vielen Dank!!

Antwort

0

Hängt davon ab, was Sie wirklich wollen und wie Ihre Daten aussehen.

Wenn Daten wie folgt aussieht:

email   |BILLING NAME|Total |OrderDate 
---------------------------------------------- 
[email protected] |John Smith |200.00 |15/05/2010 
[email protected] |John Smith | 15.49 |19/10/2010 
[email protected] |Rico Swavez | 15.00 |10/08/2010 
[email protected] |Jane Doe |250.00 |23/06/2010 
[email protected] |Jane Doe |307.32 |27/10/2010 
[email protected] |Juan Valdez |223.38 |30/08/2010 

Then ...

SELECT email, billing_name, 
FORMAT(SUM(total),2) AS total, 
DATE_FORMAT(MIN(orderdate), '%Y-%m') AS firstorder, 
DATE_FORMAT(MAX(orderdate), '%Y-%m') AS lastorder 
FROM orders 
GROUP BY email, billing_name 
ORDER BY firstorder ASC 

Will return

EMAIL   | BILLING NAME |TOTAL |FIRSTORDER | LASTORDER 
------------------------------------------------------------ 
[email protected] | John Smith |215.49|2010-05 | 2010-10 
[email protected] | Jane Doe  |557.32|2010-06 | 2010-10 
[email protected] | Rico Swavez | 15.00|2010-08 | 2010-08 
[email protected] | Juan Valdez |223.38|2010-08 | 2010-08 

Führen Sie die Abfrage zuerst in mysql sind Sie immer die Ergebnisse, die Sie wollen? Wenn nicht, dann liegt das Problem im SQL, nicht im PHP. Wenn die SQL zurückgibt, was Sie wollen, dann ist das Problem in der PHP

+0

Hey Mann, danke für den Blick auf diese. Ja, ich habe vergessen zu erwähnen, dass ich das Problem in SQL nicht lösen konnte, also versuchte ich, dies in PHP zu lösen. Ja, ich würde gerne eine Gruppe nach Vorbestellung machen. hier ist, was ich wirklich wollte mit der sql: Gruppe Kunden zu ihrem ersten Bestelldatum und sehen, was jede Gruppe verbrachte in den anderen Monaten. – yokoho

+0

Ok, lass uns darüber reden, was deine gewünschte Ausgabe dann ist, weil ich es noch nicht verstehe. Sie möchten die gesamten Einkäufe für einen Nutzer basierend auf Monat/Jahr anzeigen und nur die Summen des ersten Monats wiedergeben? (ja/nein) Oder versuchen Sie, alle E-Mail-Summen für alle Käufe zu rendern, aber zeigen Sie nur das erste Kaufdatum an? Ich bin mir nicht sicher, was Sie suchen. Sample out put mit Beispieleingaben helfen bei der Erklärung eines Problems: Eingabe -> Prozess -> Ausgabe. Wenn ich Input kenne und Output weiß, kann ich den Prozess ableiten (manchmal). – xQbert

+0

Ich möchte Kunden zu ihrem ersten Bestelldatum gruppieren und sehen, wie viel die Gruppe über die Monate ausgegeben hat und die Summen zusammenaddieren. Bitte besuchen Sie diese Website http://www.quickcohort.com/ für meine gewünschte Ausgabe. Ich möchte das Diagramm mit Summen für jeden Monat zeigen. – yokoho