Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1423 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  trier après une requète (résolu)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

trier après une requète (résolu)

n°1653034
heyoka1
Posté le 05-12-2007 à 01:49:50  profilanswer
 

Bonjour
Après plusieurs jours de recherche et toujours bloqué, je m'en remets à vous...
 
J'ai une table ( lieu ) avec ville, salle , adresse
et je veux afficher :
ville 1
        salle 1 adresse  
        salle 2 adresse
ville 2
        salle 3 adresse
ville 3
        salle 4 adresse       etc...
 
Je peux afficher le tout, mais je ne veux réafficher la ville à chaque fois, je veux pouvoir grouper par ville
 
J'ai essayé d'imbriquer une boucle dans une autre mais ça coince, et j'arrive pas à trouver où :

Code :
  1. <?php
  2. mysql_select_db($database_conn, $conn);
  3. $query_ville = "SELECT DISTINCT ville FROM lieu ";
  4. $ville = mysql_query($query_ville, $conn) or die(mysql_error());
  5. $row_ville = mysql_fetch_assoc($ville);
  6. $ville = $row_ville['ville'];
  7. do
  8.    echo $row_ville['ville']; ?><br />
  9.  <div><?php mysql_select_db($database_conn, $conn);
  10.     $query_sorte_lieu = "SELECT salle FROM lieu WHERE ville = '$ville' ";
  11.     $sorte_lieu = mysql_query($query_sorte_lieu, $conn_site3) or die(mysql_error());
  12.     $row_sorte_lieu = mysql_fetch_assoc($sorte_lieu);
  13.      do {
  14.               echo $row_sorte_lieu['salle']; ?><br /><?php
  15.       }
  16.       while ($row_sorte_lieu = mysql_fetch_assoc($sorte_lieu)); ?>
  17.  </div><?php     
  18. }
  19. while ($row_semaine1_spectacle=mysql_fetch_array($semaine1_spectacle)); ?>
  20. </div>


Oui je sais je suis débutant !!
 
Merci !


Message édité par heyoka1 le 12-03-2008 à 13:30:22
mood
Publicité
Posté le 05-12-2007 à 01:49:50  profilanswer
 

n°1653036
GostSn
Lé Ou L'ApéRo?
Posté le 05-12-2007 à 01:56:01  profilanswer
 

Code :
  1. $sql = 'SELECT nom,prenom,statut,date FROM famille_tbl ORDER BY prenom';


te trira les résultat par prénom
(c'est un exemple a adapter a tes besoins)
regarde ici http://www.phpdebutant.org/article66.php c'est super bien expliquer
 

Code :
  1. mysql_select_db($database_conn, $conn);
  2. $query_ville = "SELECT DISTINCT ville FROM lieu ";
  3. $ville = mysql_query($query_ville, $conn) or die(mysql_error());
  4. $row_ville = mysql_fetch_assoc($ville);


 
devrais devenir

Code :
  1. mysql_select_db($database_conn, $conn);
  2. $query_ville = "SELECT DISTINCT ville FROM lieu ORDER BY ville ";
  3. $ville = mysql_query($query_ville, $conn) or die(mysql_error());
  4. $row_ville = mysql_fetch_assoc($ville);


enfin la ça trie par ville..


Message édité par GostSn le 05-12-2007 à 01:59:30

---------------
http://www.free-tribes.org
n°1653133
leflos5
On est ou on est pas :)
Posté le 05-12-2007 à 10:54:28  profilanswer
 

Un petit conseil qui coute rien: essayes au maximum de séparer le code php de la sortie html ;)
 
Parce que là c'est imbitable à la lecture et ça aide pas à faire un truc clair et efficace :)

n°1653234
heyoka1
Posté le 05-12-2007 à 13:13:35  profilanswer
 

séparer le code, oui je le fais, mais pour débugger, je l'ai mis dans cet ordre ( j'avais fait un include )
 
 
Merci pour vos réponses !
Mais ce n'est pas un problème de requète ( je pense ) mais un problème de tri php,  
 
je ne veux pas obenir ça : liste dans le désordre
ville 1 - salle 1 adresse  
ville 1 - salle 2 adresse  
ville 2 - salle 3 adresse  
ville 1 - salle 4 adresse
ville 2 - salle 5 adresse    
 
mais ça : je trie par ville puis je fais une requète en récupérant $ville de la 1ere requète
 
ville 1  
salle 1 adresse  
salle 2 adresse  
salle 4 adresse
 
ville 2  
salle 3 adresse  
salle 5 adresse    
 
mon imbrication de boucle ne marche pas telle quelle.
 

Code :
  1. <?php  require_once('Connections/conn.php');
  2. mysql_select_db($database_conn, $conn);
  3. $query_ville = "SELECT DISTINCT ville FROM lieu ";
  4. $ville = mysql_query($query_ville, $conn) or die(mysql_error());
  5. $row_ville = mysql_fetch_assoc($ville);
  6. $ville = $row_ville['ville'];
  7. mysql_select_db($database_conn, $conn);
  8. $query_salle = "SELECT salle FROM lieu WHERE ville = '$ville' ";
  9. $salle = mysql_query($query_salle, $conn) or die(mysql_error());
  10. $row_salle = mysql_fetch_assoc($salle);
  11. do {
  12.      echo $row_ville['ville']; ?><br /><?php
  13.             do {
  14.                   echo $row_salle['salle']; ?><br /><?php
  15.                  }
  16.              while ($row_salle = mysql_fetch_assoc($salle));   
  17.       }
  18. while ($row_ville=mysql_fetch_assoc($ville)); ?>


 
ca bloque au deuxième while...
aaarrrgh
c'est pourtant simple....


Message édité par heyoka1 le 05-12-2007 à 14:18:46
n°1653253
Profil sup​primé
Posté le 05-12-2007 à 14:00:56  answer
 

bah oui mais y a quoi dans $semaine1_spectacle ?
un do...while avec des données en db, c'est louche.
et pourquoi tu calcules $row_sorte_lieu = mysql_fetch_assoc($sorte_lieu); deux fois ?
Et pourquoi salle et ville sont dans la même table ?
Et pourquoi y  a du DB avec de la logique avec de la présentation ?

n°1653302
heyoka1
Posté le 05-12-2007 à 14:54:12  profilanswer
 

Je viens de rééditer le code dans mon message précédent mais je le réédite pour plus de clarté  :s
 
--> j'ai enlevé semaine1_spectacle ( une erreur de copié-collé )
--> j'ai enlevé le 2e calcul de : $row_sorte_lieu = mysql_fetch_assoc($sorte_lieu), renommé $row_salle  
 
 
 
C'est louche ?
Je crois que ça viens de dreamweaver, et pour mes autres requètes, ça marche ( je suis pas codeur, pourvu que ça marche )
de toute façon j'ai l'impression qu'il y a autant de façon de coder que de codeur, alors.
 
 
 
parce qu'avec les les villages, il n'y a qu'une salle par ville, je vais pas faire une table par ville, non ?
 
 
 
heuu, faut bien les présenter les données à un moment, non ?  
j'ai enlevé les div.
 
 
Il est à jeter mon code ou pas ?
 
HHHEEEELP !  
 :jap:  
 

Code :
  1. <?php  require_once('Connections/conn.php');
  2. mysql_select_db($database_conn, $conn);
  3. $query_ville = "SELECT DISTINCT ville FROM lieu ";
  4. $ville = mysql_query($query_ville, $conn) or die(mysql_error());
  5. $row_ville = mysql_fetch_assoc($ville);
  6. $ville .= $row_ville['ville'];
  7. mysql_select_db($database_conn, $conn);
  8. $query_salle = "SELECT salle FROM lieu WHERE ville = '$ville' ";
  9. $salle = mysql_query($query_salle, $conn) or die(mysql_error());
  10. do {
  11.      echo $row_ville['ville']; ?><br /><?php
  12.             do {
  13.                   echo $row_salle['salle']; ?><br /><?php
  14.                  }
  15.              while ($row_salle = mysql_fetch_assoc($salle)); 
  16.       }
  17. while ($row_ville=mysql_fetch_assoc($ville)); ?>


 
message d'erreur :  
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/ensarthe/domains/7ensarthe.fr/public_html/Untitled-2.php on line 22


Message édité par heyoka1 le 05-12-2007 à 15:14:43
n°1653306
omega2
Posté le 05-12-2007 à 15:05:50  profilanswer
 

heyoka1 > L'utilisation d'un "do while" veut dire que t'es sur que t'auras toujours au moins une donnée à traiter dans la boucle. Es tu sur d'avoir une salle à proposer même si on saisie un nom bidon qui ne correspond à rien?
Si dreamweaver fait ce genre de supposition c'est bien par ce que c'est l'un des pires éditeurs pour faire du php. En fait, même si chaque développeur fait à sa manière quand on regarde des problèmes assez vaste autant il y a des structures de bases qui restent communes à 99% des développeurs pour des situations qu'on rencontre 30 fois par jour. La récupération des données depuis une base de donnée en fait partie.
La structure correcte est :

Citation :

while ($row = mysql_fetch_assoc($result)) {
    // traitement des valeurs
}

Tu peux noter au passage que ça élimine également le mysql_fetch_assoc que tu avais avant le do.
 
PS : Juste pour savoir, t'es certain que tu ne tomberas jamais sur des villages ou des villes qui ont plusieurs salles comunales ou des regroupements de villages qui se partagent une salle donné? Même si tu ne fais pas une table par ville, il serait préférable de faire une table pour les villes, une pour les salles et une qui fait la liaison entre les deux.


Message édité par omega2 le 05-12-2007 à 15:08:34
n°1653388
heyoka1
Posté le 05-12-2007 à 16:16:43  profilanswer
 

Merci pour ton aide  
 
Pour l'instant il n'y a pas de saisie utilisateur, donc pas d'erreur.
Je ne crée de ville que si il y a une salle, c'est la salle qui est importante et la ville est celle où elle est implantée.
 
Je travaille donc sur une mauvaise formule depuis le départ... Je vais donc rectifier
 
Je peux créer une table en plus, mais ça devient vite galère pour injecter des données avec des id_ a chercher, j'aimerai mieux pas. Cette table est déjà liée avec les évenements.
 
je viens de faire un essai, mais j'ai toujours cette p... d'erreur
 

Code :
  1. <?php // require_once('Connections/conn.php');
  2. mysql_select_db($database_conn, $conn);
  3. $query_ville = "SELECT DISTINCT ville FROM lieu ";
  4. $ville = mysql_query($query_ville, $conn) or die(mysql_error());
  5. $ville .= $row_ville['ville'];
  6. mysql_select_db($database_conn, $conn);
  7. $query_salle = "SELECT salle FROM lieu WHERE ville = '$ville' ";
  8. $salle = mysql_query($query_salle, $conn) or die(mysql_error());
  9. while ( $row_ville=mysql_fetch_assoc($ville) )
  10.         {
  11.         echo $row_ville['ville'];
  12.       while ( $row_salle=mysql_fetch_assoc($salle))
  13.    {
  14.    echo $row_salle['salle']; ?><br /><?php
  15.  }  
  16.         }
  17. ?>


 
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/ensarthe/domains/7ensarthe.fr/public_html/Untitled-2.php on line 13
 
Bon j'ai la tête comme une pastèque, j'ai tout retourné dans tous les sens...

Message cité 1 fois
Message édité par heyoka1 le 05-12-2007 à 16:19:13
n°1653392
omega2
Posté le 05-12-2007 à 16:25:39  profilanswer
 

heyoka1 a écrit :

Merci pour ton aide  
 
Pour l'instant il n'y a pas de saisie utilisateur, donc pas d'erreur.
Je ne crée de ville que si il y a une salle, c'est la salle qui est importante et la ville est celle où elle est implantée.
 
Je travaille donc sur une mauvaise formule depuis le départ... Je vais donc rectifier
 
Je peux créer une table en plus, mais ça devient vite galère pour injecter des données avec des id_ a chercher, j'aimerai mieux pas. Cette table est déjà liée avec les évenements.
 
je viens de faire un essai, mais j'ai toujours cette p... d'erreur
 

Code :
  1. <?php // require_once('Connections/conn.php');
  2. mysql_select_db($database_conn, $conn);
  3. $query_ville = "SELECT DISTINCT ville FROM lieu ";
  4. $ville = mysql_query($query_ville, $conn) or die(mysql_error());
  5. $ville .= $row_ville['ville'];
  6. mysql_select_db($database_conn, $conn);
  7. $query_salle = "SELECT salle FROM lieu WHERE ville = '$ville' ";
  8. $salle = mysql_query($query_salle, $conn) or die(mysql_error());
  9. while ( $row_ville=mysql_fetch_assoc($ville) )
  10.         {
  11.         echo $row_ville['ville'];
  12.       while ( $row_salle=mysql_fetch_assoc($salle))
  13.    {
  14.    echo $row_salle['salle']; ?><br /><?php
  15.  }  
  16.         }
  17. ?>


 
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/ensarthe/domains/7ensarthe.fr/public_html/Untitled-2.php on line 13
 
Bon j'ai la tête comme une pastèque, j'ai tout retourné dans tous les sens...


L'opérateur '.=' fait une concaténation entre le contenu de la variable et une autre chaine de caractère (avec un changement de type de variable si besoin) et met le résultat (une chaine) dans la variable qui devient donc une variable de type texte.
Plus loin tu utilises cette variable comme s'il s'agissait d'un résultat de requête. Normal qu'il te dise que c'est pas le cas.

n°1653413
heyoka1
Posté le 05-12-2007 à 16:55:43  profilanswer
 

Oui , c'était un essai, mais même sans ce point ça m... quand même....
je reprend une aspirine...

mood
Publicité
Posté le 05-12-2007 à 16:55:43  profilanswer
 

n°1653470
Profil sup​primé
Posté le 05-12-2007 à 18:29:25  answer
 

merci d'avoir suivi quelques conseils.
Maintenant, le plus important est de revoir ta structure DB. Parce que pour faire ce que tu fais actuellement, autant tout mettre dans un fichier texte.
 
Tu dois créer minimum deux tables.
Table Villes :
id : int, autoincrement,primary key
ville : varchar 255
 
Table Salles : (perso j'aurais bossé avec les cinémas, puis les salles, puis les films, puis les séances mais bon, bref)
 
id : int, autoincrement,primary key
id_ville : int
salle : varchar 255 (je suppose que c'est un nom que tu veux mettre la)
 
Avec ça, on va commencer à travailler correctement.

n°1653483
heyoka1
Posté le 05-12-2007 à 19:34:02  profilanswer
 

Merci à Omega2 ! C'est parce que j'avais déclaré une variable déjà utilisée que ça foirait...
 
Justement, au début je travaillais sur 2 tables, salles et villes.
 
Mais je voudrais vraiment me servir de ce cas pour pouvoir trier les données d'une même table
parce qu'après, j'aimerai aussi trier les évenements par salle, y mettre les dates, etc...
 
Alors j'arrive a lister les villes, mais à l'intérieur, j'arrive pas à lister les salles.

n°1653577
leflos5
On est ou on est pas :)
Posté le 06-12-2007 à 06:16:24  profilanswer
 

Je comprends toujours pas pourquoi tu fais 2 requêtes pour ramener ce résultat là :??:

n°1653663
heyoka1
Posté le 06-12-2007 à 11:07:35  profilanswer
 

ben je fais une requète pour avoir le DISTINCT ville
et je fais la deuxième pour avoir les salles = ville DISTINCT de la 1ere requète

n°1653930
leflos5
On est ou on est pas :)
Posté le 06-12-2007 à 16:14:11  profilanswer
 

D'où le fait que tu as un modèle moisi:
-si tu fais un seul écart de frappe c'est 2 villes différentes
-t'es obligé de filtrer ton truc
 
Néanmoins tu pourrais faire simplement:

Code :
  1. select ville, salle from lieu order by lieu.ville


Et après tu compares à la ville de la ligne précédente que tu gardes sous le coude: si elle change c'est que t'as fini la ville et tu passes à la suivante :spamafote:
 

n°1654317
heyoka1
Posté le 07-12-2007 à 10:22:14  profilanswer
 

Merci leflos5
J'arrive pas à traduire ta phrase par une formule ...
( !isset ? For, while ? )
 
Si tu peux m'indiquer en grande largeur...

n°1654481
leflos5
On est ou on est pas :)
Posté le 07-12-2007 à 13:20:15  profilanswer
 

*résultat = éxécution requête
*initialisation de la variable mémoire de la dernière ville à vide
*pour chaque ligne du tableau
{
    *Si la ville du résultat != ville en précédente => mise en place affichage début ville
    *afficher les infos sur la salle
    *mémoriser le nom de la ville dans la variable mémoire
}
 
:spamafote:
 
Ca change rien à ce que tu as à l'heure actuelle y'a juste en plus comparer avec la ville de la ligne précédente (ou aucune mais dans ce cas on a initialisé la variable pour gérer ce cas) et donc pour ça faut la mettre quelque part :D A la fin du traitement sur une ligne de préférence :)

n°1654639
heyoka1
Posté le 07-12-2007 à 15:47:05  profilanswer
 

heuuu...  
 
tu me traduis du chinois par du pékinois....
 
Désolé

n°1654643
heyoka1
Posté le 07-12-2007 à 15:49:33  profilanswer
 

"ville en précédente", j'arrive pas à capter.
 
on gagnerai du temps et de l'énergie avec une formule un peu plus explicite, parce que là ça m'avance pas
 
Merci

n°1654715
leflos5
On est ou on est pas :)
Posté le 07-12-2007 à 17:05:22  profilanswer
 

pardon "ville précédente stockée"
 
C'est de l'algo, simplement de la réflexion sur la façon de faire dans un langage compréhensible en faisant abstraction d'un quelconque langage de programation :spamafote:
 
Tu gardes la même structure et tu rajoutes simplement une variable dans laquelle tu stockes la ville du dernier enregistrement pour comparer avec le suivant!

n°1701016
heyoka1
Posté le 12-03-2008 à 13:21:06  profilanswer
 

Merci pour ta réponse, mais après avoir essayé 100 000 fois je n'ai réussi qu'en ayant un ID pour chaque ville avec cette méthode.
Ce qui devient problématique avec la table spectacle
 
Finalement j'ai réussi avec ma première méthode, alors j'en fais profiter ceux qui ont cherché comme moi durant des mois  :pt1cable:  
 

Code :
  1. mysql_select_db($database_conn, $conn);
  2. $query_spec2 = "SELECT DISTINCT titre FROM spectacle ";
  3. $spec2 = mysql_query($query_spec2, $conn) or die(mysql_error());
  4. while ($row_spec2 = mysql_fetch_array($spec2))
  5.         {
  6.           echo $row_spec2['titre'];
  7. $titre1 = $row_spec2['titre'];
  8. $titre2 = addslashes($titre1);
  9. mysql_select_db($database_conn, $conn);
  10. $query_spec3 = "SELECT DATE_FORMAT(dates, '%w-%e-%c') AS datefr,dates, id_lieu, salle,ville, horaire, prix FROM spectacle JOIN lieu ON id_lieu=lieuID WHERE titre='" . $titre2 . "' ";
  11. $spec3 = mysql_query($query_spec3, $conn) or die(mysql_error());
  12.             while ($row_spec3 = mysql_fetch_array($spec3))
  13.              {
  14.           echo $row_spec3['dates'].' '.$row_spec3['horaire'].' '.$row_spec3['salle'].' '.$row_spec3['ville'].' '.$row_spec3['prix'];
  15.             }
  16.    }


Désolé pour l'indentation, mais ça s'affiche pas comme je voudrais, et là j'ai pas trop le temps
 
 :wahoo:  
Merci pour votre aide !


Message édité par heyoka1 le 12-03-2008 à 13:25:15
n°1701020
CyberDenix
Posté le 12-03-2008 à 13:30:27  profilanswer
 

GROUP BY ville ?


---------------
Directeur Technique (CTO)
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  trier après une requète (résolu)

 

Sujets relatifs
[Resolu] Condition pour changer une class[Résolu] Une boucle dans une requête SQL?
Boucles et performances [ résolu ][Résolu] [Java] method invoke avec List<generics>
[Résolu][StringTokenizer - Urgent] Comment ça marche ?[Résolu] Chat: bdd ou fichier?
[Résolu] Je voudrais dupliquer des tables dans ma base MySQL[Résolu] Probleme boucle coloration
[RESOLU] Pb avec librairie GD sur PHP 4.4.2 
Plus de sujets relatifs à : trier après une requète (résolu)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR