Về cốt lõi, điều này giống như một vấn đề cơ sở dữ liệu.
Đặt cột phần trăm là NOT NULL và đặt 0 là DEFAULT.
ALTER TABLE promotions CHANGE COLUMN percent [maintain-its-type] NOT NULL DEFAULT '0';
Sau đó, vấn đề là (nếu tôi hiểu vấn đề) lấy giá trị phần trăm MAX () và MIN () cho mỗi ngày.
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;
... Tôi chưa kiểm tra điều đó, vì vậy nó có thể cần một chút thao tác.
Sau đó, khi bạn lặp qua tập kết quả của mình, bạn có thể khai báo hai mảng con riêng biệt và xây dựng mảng hoàn chỉnh của mình.
$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;
}
Đến thời điểm này, tôi đã đưa ra quá nhiều giả định về mục đích / cách sử dụng của bạn. Về cơ bản, hãy đặt số 0 làm phần trăm mặc định, truy vấn phần trăm cao nhất và thấp nhất cho mỗi cặp tỷ lệ ngày (nếu bằng không, thì số không sẽ xuất hiện là cao nhất và thấp nhất giá trị). Làm bất cứ điều gì bạn muốn với tập hợp kết quả.