Wir speichern die Kundendaten wie Name, userId und Gesamtbetrag, die sie für verschiedene Aufträge ausgegeben haben, jetzt möchte ich einen Kunden in Ränge 1 bis 4 basierend auf Gesamtbetrag er gruppieren bis jetzt ausgegeben. Unten ist das Skript, das ich benutze, aber es braucht viel Zeit, gibt es einen besseren Weg, dies zu tun? Es gibt keinen Index für dateCreate Field.So gruppieren Sie Kunden in 4 Ränge mit MYSQL Abfrage
public function getBiggestSpenders($customerUserId){
global $db, $database;
$sql = "SELECT userId, SUM(total) AS Total, ORD.dateCreate
FROM $database.`order` ORD
WHERE year(ORD.dateCreate) >= '2013'
group by ORD.userId
order by Total DESC";
$result = $db->getTable($sql);
$numRows = count($result);
$flag=0;
for($i=0;$i<$numRows && $flag==0;$i++){
$userId = $result[$i]['userId'];
if($userId==$customerUserId){
$position = $i;
$Total = $result[$i]['Total'];
$flag=1;
}
}
$quartile = $this->getQuartiles($numRows, $position);
if($quartile==1)
return $quartile;
else
return 0;
}
public function getQuartiles($numRows, $position){
$total = $numRows;
$segment = round($total/4);
$Quartile = floor($position/$segment) + 1;
return $Quartile;
}
Vielen Dank!
Haben Sie einen Index auf 'dateCreate' Spalte? –
Bitte bearbeiten Sie Ihre Frage und tag richtig: Wenn dies PHP-Code ist, fügen Sie 'php'-Tag, wenn Sie eine reine SQL-Lösung, um die PHP zu vermeiden wollen, fügen Sie' sql'-Tag. Entfernen Sie das Tag 'group'. Ich nehme an, dass das, was viel Zeit kostet, die Abfrage selbst ist, nicht das Zeug, das danach kommt, oder? –