Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mehrdimensionale Array-Abfrage mysql

Im Kern fühlt sich das wie ein Datenbankproblem an.

Setzen Sie die Prozentspalte auf NOT NULL und legen Sie 0 als STANDARD fest.

ALTER TABLE promotions CHANGE COLUMN percent [maintain-its-type] NOT NULL DEFAULT '0';

Dann geht es darum, (wenn ich das Problem verstehe) die MAX()- und MIN()-Prozentwerte für jedes Datum zu pflücken.

SELECT s.date, s.rate, MAX(p.percent) AS maxperc, MIN(p.percent) AS minperc
    FROM stock s
    LEFT JOIN promotions p ON s.date = p.date
    WHERE s.date BETWEEN '2017-01-29' AND '2017-01-31'
    GROUP BY s.date,s.rate;

...Ich habe das nicht getestet, also muss es vielleicht etwas herumspielen.

Wenn Sie dann Ihre Ergebnismenge durchlaufen, können Sie die beiden separaten Subarrays deklarieren und Ihr vollständiges Array erstellen.

$array=[];
$i=0;
while($row=mysqli_fetch_assoc($result)){
    $array[0][$i]["date"]=$row["date"];
    $array[0][$i]["rate"]=$row["rate"];
    $array[0][$i]["perc"]=$row["minperc"];
    $array[1][$i]["date"]=$row["date"];
    $array[1][$i]["rate"]=$row["rate"];
    $array[1][$i]["perc"]=$row["maxperc"];
    ++$i;
}

Zu diesem Zeitpunkt habe ich zu viele Annahmen über Ihren Zweck/Ihre Verwendung getroffen. Legen Sie im Grunde Null als Prozentvorgabe fest und fragen Sie nach dem höchsten und niedrigsten Prozentwert für jedes Datumsratenpaar ab (wenn Null, dann wird Null als höchster und niedrigster Wert angezeigt). Wert). Machen Sie mit der Ergebnismenge, was Sie wollen.