PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 11-11-2012 22:18:18

Sq78
Membre
Inscription : 13-05-2009
Messages : 47

[Résolu] Problème avec requête ou tableau, je ne sais pas trop

Bonsoir,
J'ai une requête comme ceci :

$result = $db->query('SELECT t1.id_club, t1.club, t1.championnat, t1.actif, t2.id_club, t2.journee, GROUP_CONCAT( t2.classement ) FROM '.$_PRE.'clubs AS t1, '.$_PRE.'graph AS t2 WHERE t1.id_club = t2.id_club AND t2.journee < "'.$journee.'" GROUP BY t1.club');

qui me donne ce résultat dans PhpMyAdmin :

id_club  club  championnat  actif  id_club  journee  GROUP_CONCAT( t2.classement )  
1 Ajaccio A 1 1 1 14,11,12,10,8
5 AS Cannes A 1 5 1 7,6,5,5,7
50 Avignon A 1 50 1 12,13,14,14,14
4 Beauvais A 1 4 1 8,12,13,9,11
34 Chaumont A 1 34 1 11,14,10,11,12
6 Montpellier A 1 6 1 9,5,8,8,6
42 Nantes-Rezé A 1 42 1 4,4,4,4,3
7 Narbonne A 1 7 1 3,7,7,6,5
9 Paris A 1 9 1 5,2,1,2,4
11 Rennes A 1 11 1 13,9,9,12,10
13 Sète A 1 13 1 6,3,2,1,1
14 Toulouse A 1 14 1 2,8,6,7,9
15 Tourcoing A 1 15 1 10,10,11,13,13
16 Tours A 1 16 1 1,1,3,3,2
 

Ce qui m'interesse, c'est la colonne group_concat. Ici les valeurs semblent bonnes.
Quand je les affiche avec un print_r en sortie de ma boucle, j'obtiens ceci :

Array ( [0] => 11,12,10,8,14 [1] => 7,6,5,5,7 [2] => 13,14,14,14,12 [3] => 8,12,13,9,11 [4] => 10,11,12,11,14 [5] => 9,5,8,8,6 [6] => 4,4,4,3,4 [7] => 3,7,7,6,5 [8] => 5,2,1,2,4 [9] => 13,9,9,12,10 [10] => 6,3,2,1,1 [11] => 2,8,6,7,9 [12] => 13,10,10,11,13 [13] => 3,2,1,1,3 )

On voit que certaines valeurs sont bonnes  et que d'autres ne sont pas dans le bon ordre. Par exemple, dans PhpMyAdmin pour Ajaccio j'ai 14,11,12,10,8 et dans print_r j'ai 11,12,10,8,14. En revanche, pour Paris c'est bon.

Qui peut me dire où se trouve mon erreur ? et pourquoi certaines valeurs sont bonnes surtout.
Merci d'avance

Hors ligne

#2 12-11-2012 01:10:43

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Problème avec requête ou tableau, je ne sais pas trop

Bonjour,

Si le résultat de requête est bon, alors c'est que vous devez avoir un traitement PHP intermédiaire qui doit être responsable de cela. Sans voir le code, il est difficile de vous aider.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 12-11-2012 11:14:45

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : [Résolu] Problème avec requête ou tableau, je ne sais pas trop

Bonjour,

Est ce que phpmyadmin ne rajouterai pas automatiquement un order by quelque part ? En tout cas cela serait sans doute une bonne idée d'en mettre un, car sinon l'ordre dépend uniquement de l'ordre d'entrée (et encore, en cas de crash et de réparation des tables mysql, je ne suis pas sur qu'il ne modifie pas cet ordre par defaut).

@+
ManicoW


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#4 12-11-2012 11:45:38

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Problème avec requête ou tableau, je ne sais pas trop

Saluton,
Sachant que la fonction GROUP_CONCAT accepte sa propre clause ORDER BY.
Mais comme l'a justement fait observer Jc, comme nous ne savons pas par quel code PHP est chargé l'array objet du print_r en sortie de boucle, on se perd forcément en conjectures.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 12-11-2012 22:55:13

Sq78
Membre
Inscription : 13-05-2009
Messages : 47

Re : [Résolu] Problème avec requête ou tableau, je ne sais pas trop

Bonsoir,
Voici comment se présente donc le contenu de la table interessante. (Pour chaque journée jouée ici de 1 à 5, la colonne de droite donne le classement de l'équipe. Pour cette colonne, les données sont justes et de toute façon, ce n'est pas là que se trouve le problème.

  id_club  journee  classement  
      1 1 14
      50 1 12
      4 1 8
      5 1 7
      6 1 9
      7 1 3
      9 1 5
      11 1 13
      13 1 6
      14 1 2
      15 1 10
      16 1 1
      34 1 11
      42 1 4
      1 2 11
      50 2 13
      4 2 12
      5 2 6
      6 2 5
      7 2 7
      9 2 2
      11 2 9
      13 2 3
      14 2 8
      15 2 10
      16 2 1
      34 2 14
      42 2 4
      1 3 12
      50 3 14
      4 3 13
      5 3 5
      6 3 8
      7 3 7
      9 3 1
      11 3 9
      13 3 2
      14 3 6
      15 3 11
      16 3 3
      34 3 10
      42 3 4
      1 4 10
      50 4 14
      4 4 9
      5 4 5
      6 4 8
      7 4 6
      9 4 2
      11 4 12
      13 4 1
      14 4 7
      15 4 13
      16 4 3
      34 4 11
      42 4 4
      1 5 8
      50 5 14
      4 5 11
      5 5 7
      6 5 6
      7 5 5
      9 5 4
      11 5 10
      13 5 1
      14 5 9
      15 5 13
      16 5 2
      34 5 12
      42 5 3
 

Ensuite, mon code php simplifié :

  $result = $db->query('SELECT MIN( journee ) AS jour, resultat FROM '.$_PRE.'amatchs WHERE resultat IS NULL')->fetchAll(PDO::FETCH_COLUMN, 0);
  $journee = ($result[0]);    // recuperation de la derniere journee non jouee

$class=array();
$equipe=array();

$result = $db->query('SELECT t1.id_club, t1.club, t1.championnat, t1.actif, t2.id_club, t2.journee, GROUP_CONCAT( t2.classement ) FROM '.$_PRE.'clubs AS t1, '.$_PRE.'graph AS t2 WHERE t1.id_club = t2.id_club AND t2.journee < "'.$journee.'" GROUP BY t1.club');

  while ($row = $result->fetch()) {
    $equipe[] = ucfirst($row['1']);
    $class[] = $row['6'];
  }
  print_r($class);

et donc les valeurs retournées sont celles de mon 1er message et début de ce post avec certaines équipes où le classement apparait dans le bon ordre et d'autres dans un mauvais ordre. Ou plus exactement décalé. Ex : 34512 au lieu de 12345.
J'espère que mes explications sont claires ...

Merci pour votre aide

Hors ligne

#6 13-11-2012 09:31:26

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Problème avec requête ou tableau, je ne sais pas trop

Saluton,
Tu devrais essayer avec cette clause ORDER BY au sein de la fonction GROUP_CONCAT

GROUP_CONCAT( t2.classement ORDER BY  t2.journee ASC)

la clause GROUP BY ne permettant pas d'établir, a priori, l'ordre du  classement dans le GROUP_CONCAT.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 13-11-2012 18:04:44

Sq78
Membre
Inscription : 13-05-2009
Messages : 47

Re : [Résolu] Problème avec requête ou tableau, je ne sais pas trop

Bonsoir, ta solution fonctionne. Merci beaucoup pour ton aide ainsi qu'aux autres personnes qui avaient répondu.

Hors ligne

Pied de page des forums