OVH Cloud OVH Cloud

Double iteration pour affichage structure

4 réponses
Avatar
Damien
Bonjour,
Je me casse la tête sur la façon la plus élégante de parcourrir les
résultats d'une requête...

Le contexte. Une requete sort des données type :
Propriétaire | Etat
1 | 0
1 | 1
1 | 2
2 | 0
2 | 2

Ce que je veux :

- Propriétaire 1 :
- 0
- 1
- 2
- Propriétaire 2 :
- 0
- 2

Jusque là je fais une vilaine boucle qui me pose des problèmes de
while($resultat = mysql_fetch_row), j'ai l'impression que je "perds" des
résultats de temps en temps.

Quelle est la façon la plus propre de penser sa boucle ?

Merci d'avance pour vos suggestions ou liens !

@+
--
Damien

4 réponses

Avatar
ftc
Bonjour,
Je me casse la tête sur la façon la plus élégante de parcourrir les
résultats d'une requête...

Le contexte. Une requete sort des données type :
Propriétaire | Etat
1 | 0
1 | 1
1 | 2
2 | 0
2 | 2

Ce que je veux :

- Propriétaire 1 :
- 0
- 1
- 2
- Propriétaire 2 :
- 0
- 2

Jusque là je fais une vilaine boucle qui me pose des problèmes de
while($resultat = mysql_fetch_row), j'ai l'impression que je "perds" des
résultats de temps en temps.



Voila comment je ferai:

$proprietaire = array();

while( $r = mysql_fetch_assoc( $res ) ) {
if ( isset( $proprietaire[$r['Proprietaire']] ) ) {
$proprietaire[$r['Proprietaire']][] = $proprietaire['Etat'];
}
else {
$proprietaire[$r['Proprietaire']] = array($proprietaire['Etat']);
}
}

Bon, ce n'est pas super optimisé en terme de temps d'exécution, mais ça
fonctionne.

Avatar
Olivier Miakinen

Le contexte. Une requete sort des données type :
Propriétaire | Etat
1 | 0
1 | 1
1 | 2
2 | 0
2 | 2

Ce que je veux :

- Propriétaire 1 :
- 0
- 1
- 2
- Propriétaire 2 :
- 0
- 2


Je vais supposer que tes données sont déjà triées, sinon il faut le
faire avant d'utiliser l'algorithme suivant.


$sauve_prop = "une valeur que tu ne peux pas rencontrer";
while (il reste des données) {
$prop = <le propriétaire>;
$etat = <l'état>;
if ($prop !== $sauve_prop) {
afficher("- Propiétaire $prop :");
$sauve_prop = $prop;
}
afficher(" - $etat");
}

Jusque là je fais une vilaine boucle qui me pose des problèmes de
while($resultat = mysql_fetch_row), j'ai l'impression que je "perds" des
résultats de temps en temps.


Si tu as un problème SQL, c'est peut-être dans le groupe sur les sgbd
que tu devrais poser ta question (fr.comp.applications.sgbd si je me
rappelle bien). Cela dit, ton problème d'algo était pile-poil en charte
dans fr.comp.algorithmes...

Cordialement,
--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Damien
(snip)
$sauve_prop = "une valeur que tu ne peux pas rencontrer";
while (il reste des données) {
$prop = <le propriétaire>;
$etat = <l'état>;
if ($prop !== $sauve_prop) {
afficher("- Propiétaire $prop :");
$sauve_prop = $prop;
}
afficher(" - $etat");
}


Wow... Quelle élégance ! Une ou 2 lignes de code supplémentaire pour
gérer les ouvertures/fermetures de listes, et ça roule... Merci !!!

(snip)

Si tu as un problème SQL, c'est peut-être dans le groupe sur les sgbd
que tu devrais poser ta question


En fait, je "perdais" les données dans la boucle PHP, pas dans la
requête...
(snip)
Cela dit, ton problème d'algo était pile-poil en charte
dans fr.comp.algorithmes...


C'est vrai que je ne pense pas en termes "d'algo", étant un bon bricolo
du dimanche. Je suis dans PHPEdit, je fais du péhachepé, pas de La
Programation (avec un P majuscule) :)

Merci encore pour ce petit cours...

Cheers,
--
Damien
"I asked Dad if I was gifted when I was born.
He said they would certainly not have paid for me."
Calvin & Hobbes (B. Watterson)

Avatar
Damien
(snip)
Voila comment je ferai:

$proprietaire = array();

while( $r = mysql_fetch_assoc( $res ) ) {
if ( isset( $proprietaire[$r['Proprietaire']] ) ) {
$proprietaire[$r['Proprietaire']][] = $proprietaire['Etat'];
}
else {
$proprietaire[$r['Proprietaire']] = array($proprietaire['Etat']);
}
}
(snip)


Pas mal du tout, je garde ça sous le coude pour un autre script ! Merci !

Cheers,
--
Damien