इसके मूल में, यह एक डेटाबेस समस्या की तरह लगता है।
प्रतिशत कॉलम को NULL के रूप में सेट करें और 0 को डिफ़ॉल्ट के रूप में सेट करें।
ALTER TABLE promotions CHANGE COLUMN percent [maintain-its-type] NOT NULL DEFAULT '0';
फिर यह (यदि मैं समस्या को समझता हूं) प्रत्येक तिथि के लिए MAX () और MIN () प्रतिशत मान लेने की बात है।
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;
...मैंने इसका परीक्षण नहीं किया है, इसलिए इसमें कुछ गड़बड़ करने की आवश्यकता हो सकती है।
फिर जैसे ही आप अपने परिणाम सेट के माध्यम से लूप करते हैं, आप दो अलग-अलग उप-सरणी घोषित कर सकते हैं और अपनी पूरी सरणी बना सकते हैं।
$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;
}
इस बिंदु तक, मैंने आपके उद्देश्य/उपयोग के बारे में बहुत सारी धारणाएँ बना ली हैं। मूल रूप से, शून्य को प्रतिशत डिफ़ॉल्ट के रूप में सेट करें, प्रत्येक दिनांक-दर युग्म के लिए उच्चतम और निम्नतम प्रतिशत के लिए क्वेरी (यदि शून्य है, तो शून्य उच्चतम और निम्नतम के रूप में दिखाई देगा) मूल्य)। परिणाम सेट के साथ आप जो चाहें करें।