Mysql
 sql >> Base de données >  >> RDS >> Mysql

requête de tableau multidimensionnel mysql

À la base, cela ressemble à un problème de base de données.

Définissez la colonne de pourcentage sur NOT NULL et définissez 0 sur DEFAULT.

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

Ensuite, il s'agit (si je comprends le problème) de sélectionner les valeurs de pourcentage MAX() et MIN() pour chaque date.

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;

... Je n'ai pas testé cela, donc il faudra peut-être jouer avec.

Ensuite, lorsque vous parcourez votre jeu de résultats, vous pouvez déclarer les deux sous-tableaux distincts et créer votre tableau complet.

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

À ce stade, j'ai fait trop d'hypothèses sur votre objectif/utilisation. Fondamentalement, définissez zéro comme pourcentage par défaut, recherchez le pourcentage le plus élevé et le plus bas pour chaque paire de taux de date (si zéro, alors zéro apparaîtra comme le plus élevé et le plus bas évaluer). Faites ce que vous voulez avec le jeu de résultats.