Probleme de tri PHP/MYSQL

Fermé
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 - 30 mars 2008 à 21:59
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 - 31 mars 2008 à 00:21
Bonjour,

j'ai fait un formulaire de recherche sur mon site, tout fonctionne bien la seule chose j'aimerais bien faire afficher le résultat en ordre alphabétique de ma colonne latin par exemple.

J'ai essayer de plusieurs manières mais ça ne fonctionne pas, j'espère que vous pourrez m'aider.

voici mon code pour rechercher dans ma base de données :
<?php
  include('connexion.php');

  echo $date;


    $h = $_POST['name'];
    echo "<BR>\n";

    echo $row['date']; 
    echo "<BR>\n";
    $SQL = "SELECT * FROM bois WHERE latin LIKE '%$h%' OR francais LIKE '%$h%' OR anglais LIKE '%$h%' OR pays_fr LIKE '%$h%' OR pays_ang LIKE '%$h%' OR cont_fr LIKE '%$h%' OR cont_ang LIKE '%$h%'";
    $result = mysql_query($SQL) or die("La requête <BR><PRE>$SQL</PRE>a échoué : ".mysql_error());
    $article =mysql_fetch_object($result);
    $result = mysql_query($SQL) ;
	$enregistrements = mysql_num_rows($result);
    //j'ai defini une variable $i pour afficher 5 enregistremnt par ligne
    echo "<TABLE border =\"0\" width=\"100%\" CELLPADDING=\"0\" cellspacing=\"0\">";
echo "$enregistrements enregistrements ont été trouvés pour <EM>$h</EM>.\n";
echo "<BR>\n";
echo "Cliquez sur l'image pour voir la page des détails\n";
//initialiser la variable $i a 0
   $i=0;
   while($row = mysql_fetch_row($result))
      {
$id = $row['0'];
$photo = $row['6'];
$latin = $row['3'];
$francais = $row['4'];	
$anglais = $row['5'];
$pays = $row['8'];  
    if ($i==0)
     {
  echo "<TR>";
  }

//on incremente la variable
  $i=$i+1;
?>
</center>
<p>
<p>
<p>
<center>
  <table align="center" width="852" border="1" cellpadding="0">
    <tr>
    <td width="52" valign="middle"><form method="post" action="../../bois.php">
              <input type="image" border="0" value="Submit" src="<?php echo "$photo"; ?>" width="55" height="34" name="img" border="0">
              <input type="hidden" name="img" value="<?php echo "$id"; ?>">
      </form></td>
    <td width="200" valign="middle"><span class="style1"><?php echo "$latin"; ?></span></td>
    <td width="200" valign="middle"><span class="style5"><?php echo "$francais"; ?></span></td>
    <td width="200" valign="middle"><span class="style5"><?php echo "$anglais"; ?></span></td>
    <td width="200" valign="middle"><span class="style5"><?php echo "$pays"; ?></span></td>
  </tr>
</table>
</center>
 <?php
  if ($i==5)
  {
  echo "</TR>";
  $i=0;
  }
   }
 echo"</table>";  
 ?>


Merci d'avance pour votre aide.
A voir également:

4 réponses

Bonjour,

Pourquoi ne pas faire un order by "votre champs à trié" ASC dans la requête SQL ?

Ainsi le résultat de ta requête sera trié dans l'ordre alphabétique.


par exemple :


$SQL = "SELECT * FROM bois WHERE latin LIKE '%$h%' OR francais LIKE '%$h%' OR anglais LIKE '%$h%' OR pays_fr LIKE '%$h%' OR pays_ang LIKE '%$h%' OR cont_fr LIKE '%$h%' OR cont_ang LIKE '%$h%' ORDER BY latin ASC";

1+
0
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 459
30 mars 2008 à 23:43
merci a vous deux Le D et chantaussel

Oui de cette façon ça fonctionne

Mais je me demandais si je pouvais le faire autrement. Je m'explique et j'essaie d'être clair. Ma formule dit
cher dans la table bois où latin contient la recherche OU si francais contient la recherche et ainsi de suite

quand je mets un ORDER BY latin à la fin et bien tout les résultats sont affichée et les noms latins en ordre

ex si je recherche un nom latimn j'aimerais que les noms latins soient en ordre
et si je recherche un nom francais que les noms francais soient en ordre dans le résultat
et ainsi de suite.

j'ai essayé ceci mais avec erreur :
$SQL = "SELECT * FROM bois WHERE latin LIKE '%$h%' ORDER BY latin ASC OR francais LIKE '%$h%' ORDER BY francais ASC OR anglais LIKE '%$h%' ORDER BY anglais ASC OR pays_fr LIKE '%$h%' ORDER BY pays_fr ASC OR pays_ang LIKE '%$h%' ORDER BY pays_ang ASC OR cont_fr LIKE '%$h%' ORDER BY cont_fr ASC OR cont_ang LIKE '%$h%' ORDER BY cont_ang ASC";
0
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 30
30 mars 2008 à 23:12
Il te suffit de rajouter un ORDER BY à la fin de ta sélection :

$SQL = "SELECT * FROM bois WHERE latin LIKE '%$h%' OR francais LIKE '%$h%' OR anglais LIKE '%$h%' OR pays_fr LIKE '%$h%' OR pays_ang LIKE '%$h%' OR cont_fr LIKE '%$h%' OR cont_ang LIKE '%$h%' ORDER BY latin";


Je pense que ça devrait le faire!

Bon courage! ;)

edit : Le D a été plus rapide!
0
Désolé ^^
0
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 30
30 mars 2008 à 23:52
Je ne comprends pas vraiment ce que tu veux faire car j'ai du mal à visualiser ce qu'il y a dans ta bdd. Dis-nous un peu plus précisément comment elle est structurée (les différents champs et les entrées)
0
Ricky38 Messages postés 4349 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 459
31 mars 2008 à 00:00
ok alors ma dase de données contient :


ID
les noms latins
les noms francais
les noms anglais
les pays anglais et francais
les continents anglais et francais
etc...

en gros c'est un inventaire d'essences de bois, sa provenance, son nom francais, son nom latin, son nom anglais, son continent et son pays.

si je tape dans la recherche le mot érable il me sort toute les entrées qui contient érable.

ce que j'aimerais :

si je tape érable et bien le résultat s'affiche et tous les noms francais sont en ordre
si je tape maple le résultat s'affiche et toules noms anglais sont en ordre
0
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 30
31 mars 2008 à 00:21
Ok, je comprends... Mais la solution ne me vient pas tout de suite...

Il faudrait trouver un moyen qu'il te ressorte le nom du champ dans lequel il a trouvé la chaine de caractères en question, stocker le nom du champ dans une variable, puis se resservir de cette variable dans le ORDER BY. Ça doit être possible mais je sais pas trop comment!

Ya un problème qui me vient tout de suite : qu'est ce qui se passe si des noms d'essence se disent de la même façon dans plusieurs langues?

Et ce serait pas possible qu'au moment où tu tapes "érable" tu lui dise que c'est du français? Ça simplifierait grandement les choses!

J'y réfléchis et si je trouve quelque chose je t'en fais part!
0