W gruncie rzeczy wydaje się to być problemem z bazą danych.
Ustaw kolumnę procentową na NOT NULL i ustaw 0 jako DOMYŚLNE.
ALTER TABLE promotions CHANGE COLUMN percent [maintain-its-type] NOT NULL DEFAULT '0';
Następnie jest to kwestia (jeśli rozumiem problem) wyrywania wartości procentowych MAX() i MIN() dla każdej daty.
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;
...Nie testowałem tego, więc może wymagać trochę majstrowania.
Następnie, przechodząc przez zestaw wyników w pętli, możesz zadeklarować dwie oddzielne podtablice i zbudować pełną tablicę.
$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;
}
Do tego momentu poczyniłem zbyt wiele założeń dotyczących twojego celu/użytkowania. Zasadniczo ustaw zero jako domyślną wartość procentową, zapytaj o najwyższy i najniższy procent dla każdej pary data-stawka (jeśli zero, wtedy zero będzie wyświetlane jako najwyższy i najniższy procent wartość). Rób, co chcesz z zestawem wyników.