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

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

Marsh Posté le 05-12-2007 à 01:49:50    

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
Reply

Marsh Posté le 05-12-2007 à 01:49:50   

Reply

Marsh Posté le 05-12-2007 à 01:56:01    

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
Reply

Marsh Posté le 05-12-2007 à 10:54:28    

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 :)

Reply

Marsh Posté le 05-12-2007 à 13:13:35    

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
Reply

Marsh Posté le 05-12-2007 à 14:00:56    

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 ?

Reply

Marsh Posté le 05-12-2007 à 14:54:12    

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
Reply

Marsh Posté le 05-12-2007 à 15:05:50    

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
Reply

Marsh Posté le 05-12-2007 à 16:16:43    

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
Reply

Marsh Posté le 05-12-2007 à 16:25:39    

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.

Reply

Marsh Posté le 05-12-2007 à 16:55:43    

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

Reply

Marsh Posté le 05-12-2007 à 16:55:43   

Reply

Marsh Posté le 05-12-2007 à 18:29:25    

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.

Reply

Marsh Posté le 05-12-2007 à 19:34:02    

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.

Reply

Marsh Posté le 06-12-2007 à 06:16:24    

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

Reply

Marsh Posté le 06-12-2007 à 11:07:35    

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

Reply

Marsh Posté le 06-12-2007 à 16:14:11    

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:
 

Reply

Marsh Posté le 07-12-2007 à 10:22:14    

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

Reply

Marsh Posté le 07-12-2007 à 13:20:15    

*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 :)

Reply

Marsh Posté le 07-12-2007 à 15:47:05    

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

Reply

Marsh Posté le 07-12-2007 à 15:49:33    

"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

Reply

Marsh Posté le 07-12-2007 à 17:05:22    

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!

Reply

Marsh Posté le 12-03-2008 à 13:21:06    

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
Reply

Marsh Posté le 12-03-2008 à 13:30:27    

GROUP BY ville ?


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed