par
ynx » 18 sept. 2014, 14:05
Ok je comprend mieux.
Le problème est que ta requête te retourne un prix par résultat (par tour de boucle), tu ne peux donc pas récupérer les deux prix sur un seul tour de boucle (ça serait possible en effectuant des sous-requêtes mais ce serait moins optimisé).
Une solution est donc de construire un tableau avec en clé l'id du produit, puis ajouter une deuxième dimension au tableau pour enregistrer les prix. On commence donc par parcourir l'ensemble des résultats de la requête dans ce tableau à deux dimensions, puis on l'affiche.
Voici un exemple : (pour mes tests j'ai remplacé ton fetch par un tableau $resultatRequete)
$resultatRequete = array(
array('id_produit' => 'produit1', 'id_boutique' => 1, 'prix' => 'prix1'),
array('id_produit' => 'produit1', 'id_boutique' => 2, 'prix' => 'prix2'),
array('id_produit' => 'produit2', 'id_boutique' => 1, 'prix' => 'prix1'),
array('id_produit' => 'produit2', 'id_boutique' => 2, 'prix' => 'prix2'),
array('id_produit' => 'produit3', 'id_boutique' => 2, 'prix' => 'prix2'),
array('id_produit' => 'produit4', 'id_boutique' => 1, 'prix' => 'prix1')
);
$prixParProduit = array();
foreach ($resultatRequete as $donnee) {
// on initialise nos variables si elle ne sont pas définies
if (!isset($prixParProduit[$donnee['id_produit']]['prix_boutique1'])) {
$prixParProduit[$donnee['id_produit']]['prix_boutique1'] = 0;
}
if (!isset($prixParProduit[$donnee['id_produit']]['prix_boutique2'])) {
$prixParProduit[$donnee['id_produit']]['prix_boutique2'] = 0;
}
if ($donnee['id_boutique'] == 1) {
$prixParProduit[$donnee['id_produit']]['prix_boutique1'] = $donnee['prix'];
}
if ($donnee['id_boutique'] == 2) {
$prixParProduit[$donnee['id_produit']]['prix_boutique2'] = $donnee['prix'];
}
}
// on affiche les prix
echo 'idProduit prix boutique1 prix boutique2<br />';
foreach ($prixParProduit as $idProduit => $prixProduit) {
echo $idProduit . ' ' . $prixProduit['prix_boutique1'] . ' ' . $prixProduit['prix_boutique2'] . '<br />';
}
Bonne journée
Ok je comprend mieux.
Le problème est que ta requête te retourne un prix par résultat (par tour de boucle), tu ne peux donc pas récupérer les deux prix sur un seul tour de boucle (ça serait possible en effectuant des sous-requêtes mais ce serait moins optimisé).
Une solution est donc de construire un tableau avec en clé l'id du produit, puis ajouter une deuxième dimension au tableau pour enregistrer les prix. On commence donc par parcourir l'ensemble des résultats de la requête dans ce tableau à deux dimensions, puis on l'affiche.
Voici un exemple : (pour mes tests j'ai remplacé ton fetch par un tableau $resultatRequete)
[php]
$resultatRequete = array(
array('id_produit' => 'produit1', 'id_boutique' => 1, 'prix' => 'prix1'),
array('id_produit' => 'produit1', 'id_boutique' => 2, 'prix' => 'prix2'),
array('id_produit' => 'produit2', 'id_boutique' => 1, 'prix' => 'prix1'),
array('id_produit' => 'produit2', 'id_boutique' => 2, 'prix' => 'prix2'),
array('id_produit' => 'produit3', 'id_boutique' => 2, 'prix' => 'prix2'),
array('id_produit' => 'produit4', 'id_boutique' => 1, 'prix' => 'prix1')
);
$prixParProduit = array();
foreach ($resultatRequete as $donnee) {
// on initialise nos variables si elle ne sont pas définies
if (!isset($prixParProduit[$donnee['id_produit']]['prix_boutique1'])) {
$prixParProduit[$donnee['id_produit']]['prix_boutique1'] = 0;
}
if (!isset($prixParProduit[$donnee['id_produit']]['prix_boutique2'])) {
$prixParProduit[$donnee['id_produit']]['prix_boutique2'] = 0;
}
if ($donnee['id_boutique'] == 1) {
$prixParProduit[$donnee['id_produit']]['prix_boutique1'] = $donnee['prix'];
}
if ($donnee['id_boutique'] == 2) {
$prixParProduit[$donnee['id_produit']]['prix_boutique2'] = $donnee['prix'];
}
}
// on affiche les prix
echo 'idProduit prix boutique1 prix boutique2<br />';
foreach ($prixParProduit as $idProduit => $prixProduit) {
echo $idProduit . ' ' . $prixProduit['prix_boutique1'] . ' ' . $prixProduit['prix_boutique2'] . '<br />';
}
[/php]
Bonne journée