PHP / mySQL - comment récupérer des lignes imbriquées dans un tableau multidimensionnel



Answers

Il pourrait être plus facile d'obtenir d'abord toutes les échelles, puis tous les éléments.

//first get scales
while ($row = fetchrowfunctionhere()) {
    $scale = $scales->createFromArray($row);
}

//then get items
$lastId = null;
while ($row = fetchrowfunctionhere()) {
    $scaleId = $row['scaleID'];
    if ($lastId != $scaleId) {
        $scale = $scales->getByScaleId($scaleId);
    }
    $item = $items->createFromArray($row);
    $scale->addItem($item);
    $lastId = $scaleId;
}

ou tout en un sql

$lastId = null;
while ($row = fetchrowfunctionhere()) {
    $scaleData = array_slice($row, 0, 5, true);
    $itemData = array_slice($row, 5, 5, true);
    $scaleId = $scaleData['scaleID'];
    if ($lastId != $scaleId) {
        $scale = $scales->createFromArray($scaleData);
    }
    $item = $items->createFromArray($itemData);
    $scale->addItem($item);
    $lastId = $scaleId;
}

tout comme un tableau heureux

while ($row = fetchrowfunctionhere()) {
    $scaleData = array_slice($row, 0, 5, true);
    $itemData = array_slice($row, 5, 5, true);
    $scaleId = $scaleData['scaleID'];
    if (!isset($scales[$scaleId])) {
        $scales[$scaleId] = $scaleData;
    }
    $itemId = $itemData['itemID'];
    $scales[$scaleId]['items'][$itemId] = $itemData;
}
Question

Venant d' une autre de mes questions où j'ai appris à ne JAMAIS utiliser les requêtes db dans les boucles, je dois par conséquent apprendre comment extraire toutes les données de manière pratique avant de les parcourir.

Disons que j'ai deux tables "échelles" et "articles". Chaque élément dans les éléments appartient à une échelle dans les échelles et est lié à une clé étrangère (scaleID). Je veux extraire toutes ces données dans une structure de tableau dans une requête de telle sorte que la première dimension soit toutes les échelles avec toutes les colonnes et imbriquées dedans, tous les éléments d'une échelle toutes les colonnes.

Le résultat serait quelque chose comme ça:

scale 1, scaleParam1, scaleParam2, ...
....item1, itemParam1, itemParam2, ...
....item2, itemParam1, itemParam2, ...
scale 2, scaleParam2, scaleParam2, ...
....item1, itemParam1, itemParam2, ...
....item2, itemParam1, itemParam2, ...

Jusqu'à présent, j'ai principalement quitté les jointures pour les relations un-à-un. C'est un one-to-many et je ne peux pas m'en sortir.

Est-ce une bonne jointure, est-ce que cela peut aussi être fait avec une sous-requête, comment y mettre aussi toutes les lignes externes ...

plus tard je voudrais itérer à travers avec des boucles foreach imbriquées.

Peut-être que c'est juste que j'ai mal à la tête ...




Related