sql >> Database >  >> RDS >> Mysql

multidimensionale matrixquery mysql

In de kern voelt dit als een databaseprobleem.

Stel de procentkolom in als NIET NULL en stel 0 in als STANDAARD.

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

Dan is het een kwestie van (als ik het probleem begrijp) de MAX() en MIN() procentwaarden voor elke datum te plukken.

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;

...Ik heb dat niet getest, dus het kan wat gepruts nodig hebben.

Terwijl u door uw resultatenset bladert, kunt u de twee afzonderlijke subarrays declareren en uw volledige array samenstellen.

$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;
}

Op dit punt heb ik te veel veronderstellingen gemaakt over uw doel / gebruik. Stel in principe nul in als het standaardpercentage, zoek naar het hoogste en laagste percentage voor elk datum-snelheidspaar (als nul, dan verschijnt nul als hoogste en laagste waarde). Doe wat je wilt met de resultatenset.




  1. Gebruikerswachtwoord wijzigen via jdbc. Problemen met passen met vraagtekens

  2. Heroku pg:push psql:FATAL:wachtwoordverificatie mislukt voor gebruiker

  3. OPGELOST:Microsoft Office 365 versie 2009 kan uw databasetoepassing breken

  4. PHP $stmt->num_rows werkt niet met voorbereide instructies