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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Tri Varchar avec lettre et chiffre ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tri Varchar avec lettre et chiffre ?

n°2118270
COCOOP
Posté le 25-12-2011 à 15:14:10  profilanswer
 

Salut!
 
J'ai un moteur de recherche où les titres des résultats sont des codes de type 4 lettres puis 3 chiffres (Ex : KEC012) dans un colonne nommée Code de type Varchar, Defaut=null, latin1_general_cs et Null=Oui
Or les résultats ne sont jamais triés dans l'ordre alphabétique+numérique avec ce genre de ligne :
 

Code :
  1. $requete=mysql_db_query("$sql_bdd","select count(*) from recherche where motcles like $phrase ORDER BY CODE",$db_link);


 
Dois-je changer le type "Varchar" ? Ou Order by code nest pas bon pour ça ?
 
Merci d'avance !

Message cité 1 fois
Message édité par COCOOP le 25-12-2011 à 15:15:20
mood
Publicité
Posté le 25-12-2011 à 15:14:10  profilanswer
 

n°2118365
COCOOP
Posté le 26-12-2011 à 18:36:06  profilanswer
 

Pleaseee c'est pour un projet à rendre le 2 janvier.. !

n°2118387
nisalon_ca​je
Posté le 27-12-2011 à 00:16:30  profilanswer
 

je vais peut être dire une ânerie, mais il me semble, si je comprends bien ce que tu veux faire, qu'il manque un group by (tu n'as pas qu'une seule ligne de résultat là ?)
Donc à partir de là le order n'a pas tellement de sens ...


---------------
http://nisalon.labrute.com/
n°2118388
COCOOP
Posté le 27-12-2011 à 00:28:07  profilanswer
 

Salut! Merci de ta réponse!
 
J'ai bien plusieurs résultats/codes pour certaines recherches mais pas classés dans "l'ordre alphanumérique".
Qu'est-ce que ce group by ?
A la base c'est un script de moteur de recherche que j'ai trouvé sur le net, je l'ai légèrement adapté


Message édité par COCOOP le 27-12-2011 à 00:28:37
n°2118411
olivthill
Posté le 27-12-2011 à 10:30:32  profilanswer
 

Est-ce un select count(*) ou un select * que vous voulez ?
Votre requête select count(*) vous ramène une seule ligne qui est le nombre d’occurrences. Et il ne peut pas y avoir de tri avec une seule ligne.
Donc, je vais supposer que c'est select *
 
Changer le type Varchar (en quoi ?) ne devrait rien changer. Mais vous pouvez essayer pour voir, ça ne mange pas de pain.
 
Le group by n'est pas nécessaire ici, car c'est un select * ou un select count(*) global et non pas pour une colonne particulière, ou pour certaines colonnes. Le problème se situerait donc ailleurs.
 
Normalement le tri se fait correctement avec le Order by. Donc, c'est bizarre. Mais je ne visualise pas bien ce qu'il y a dans la base, ce que sort la requête, et ce que devrait sortir la requête. Un exemple de 3 ou 4 lignes serait le bienvenu.
 
Si vous avez des données KEC002, KEC012, KEC312, alors ça devrait bien se passer.
Si vous avez des données KEC2, KEC12, KEC312, alors l'ordre sera KEC12, KEC2, KEC312, qui n'est peut-être pas celui que vous voudriez avoir.


Message édité par olivthill le 27-12-2011 à 10:31:08
n°2118428
COCOOP
Posté le 27-12-2011 à 14:38:48  profilanswer
 

Bonjour!
 
Comme mes connaissances ne sont pas très poussées avec tout ce qui est Mysql,
Voici le script que j'ai légèrement adapté (Suppression du système de page, suppression de l'ID du résultat qui permettait le tri avec Order By ID mais j'ai dû le supprimé car les résultats doivent se classer selon les codes et non les id des codes)
 

Code :
  1. <?
  2. include("head-debutcontenu.html" );        //header html
  3. ?>
  4. <span class="form">
  5.  <form action="index.php" method="post">
  6.  
  7.   <input type="text"  class="champ" size="20" name="mot">
  8.   <input type="submit" class="valider" name="valider" value="OK">
  9.  
  10.  </form>
  11. </span>
  12. <span class="resultat">
  13. <li><a>R&eacute;sultat</a></li>
  14. </span>
  15. <?
  16. // NBRE DE RESULTATS PAR PAGE
  17. $limit=50;
  18. // NOM DE CE SCRIPT
  19. $script_name="index.php";
  20. // SERVEUR SQL
  21. $sql_serveur="confidentiel";
  22. // LOGIN SQL
  23. $sql_user="confidentiel";
  24. // MOT DE PASSE SQL
  25. $sql_passwd="confidentiel";
  26. // BASE DE DONNEE
  27. $sql_bdd="confidentiel";
  28. // RECHERCHE AVEC TOUS LES MOTS METTEZ "and" RECHERCHER LES PAGES QUI CONTIENNENT AU MOINS UN MOT METTEZ "or"
  29. $et_ou="or";
  30. $db_link = mysql_connect("$sql_serveur","$sql_user","$sql_passwd" );
  31. if(isset($_POST["mot"])) $mot = $_POST["mot"];
  32. else $mot = "";
  33. $mots=split(" ",$mot);
  34. $mot=str_replace(' ','',$mot);
  35. $mot = ltrim($mot);
  36. $mot = rtrim($mot);
  37. $nombre_mots=count($mots);
  38. $z=1;
  39. $texte="R&eacute;sultats avec <b>$mots[0]</b> ";
  40. $phrase="'%$mots[0]%'";
  41. while($z<$nombre_mots)
  42. {
  43. $phrase.=" ".$et_ou." motcles like '%$mots[$z]%'";
  44. $texte.=" ";
  45. if($et_ou=="and" ){$texte.="et";}else{$texte.="ou";}
  46. $texte.=" <b>&quot;$mots[$z]&quot;</b>";
  47. $z++;
  48. }
  49. if($debut=="" ){$debut=0;}
  50. $debut=$page*$limit;
  51. // NOMBRE TOTAL D'ENREGISTREMENTS REPONDANT A LA REQUETE
  52. $requete=mysql_db_query("$sql_bdd","select count(*) from recherche where motcles like $phrase order by code",$db_link);
  53. $nb_total=mysql_result($requete,0,"count(*)" );
  54. $requete=mysql_db_query("$sql_bdd","select * from recherche where motcles like $phrase limit $debut,$limit",$db_link);
  55. $num=mysql_num_rows($requete);
  56. // DEFINITION DU MESSAGE A AFFICHER
  57. if ($mot=="" )  {echo "Entrez un mot cl&eacute;s";}
  58. else if ($num==0) {echo "$mot n'a pas renvoy&eacute; de code(s)";}
  59. // AFFICHAGE DES RESULTATS
  60. else {
  61. if ($nb_total>1) {echo "<b>$nb_total</b> $texte  :";}
  62. else
  63. {
  64. echo "1 $texte  :";
  65. }
  66. $i=0;
  67. while($i<$num)
  68. {
  69. $categorie=mysql_result($requete,$i,"categorie" );
  70. $autreinfocode=mysql_result($requete,$i,"autreinfocode" );
  71. $code=mysql_result($requete,$i,"code" );
  72. $description=mysql_result($requete,$i,"description" );
  73. echo <div class=\"resultat\"><a title=\"$autreinfocode\">$code</a><span class=\"categorie\">$categorie</span></br><span class=\"description\"><b>Description : </b>$description</span></div>\n";
  74. $i++;
  75. }
  76. echo "</br>";
  77. }
  78. // DECONNEXION DE LA BASE DE DONNEE
  79. mysql_close($db_link);
  80. include("pied-index.html" );
  81. ?>


 
(Désolé pour le pavé)
 
Et précision : les codes ont le même nombre de caractères donc cela devrait passer


Message édité par COCOOP le 27-12-2011 à 14:45:00
n°2118597
COCOOP
Posté le 28-12-2011 à 21:00:01  profilanswer
 

Petit UP !

n°2118637
olivthill
Posté le 29-12-2011 à 10:48:05  profilanswer
 

La ligne du Select est intéressante.
Le reste du code n'est pas très utile pour le problème.
 
Mais surtout, il manque des exemples de :
- données en base
- données retournées actuellement
- données qu'il faudrait que la requête retourne.
Il suffirait de donner juste quelques lignes, pour qu'on comprenne bien le problème, parce que là, pour moi personnellement, la question n'est pas encore très claire, et c'est peut-être le cas pour d'autres personnes c, ce qui expliquerait l'absence de réponse.
 
Quoi qu'il en soit, je ne vois pas l'intérêt de mettre le "order by..." dans la requête du "select count(*)...". Je pense qu'il faudrait plutôt mettre le "order by..." dans la requête du "select *..."

n°2119164
pop-pan
yay!
Posté le 03-01-2012 à 11:52:28  profilanswer
 

COCOOP a écrit :

Salut!
... 4 lettres puis 3 chiffres (Ex : KEC012) dans un colonne nommée Code  


 
je vois pas 4 lettres dans ton exemple moi.
 
sinon pour prendre le pb dans un autre sens, une recherche normalement ca se trie par pertinence.
pour ca il y a "match against"
 
http://dev.mysql.com/doc/refman/5. [...] earch.html => recherche fullltext
http://dev.mysql.com/doc/refman/5. [...] olean.html => recherche mode boolean (et/ou/non...)
 


---------------
[VDS] rail vesa, bras ecran, support TV / [ACH] des machins

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Tri Varchar avec lettre et chiffre ?

 

Sujets relatifs
[C] Tri par insertion simple & pointeurs de datesCréer une liste contenant les chiffre d'un nombre donné (python)
Macro pour convertir chiffre en lettreTri croissant des fichiers dans l'explorateur Windows
array ou varchar ?Hein? mon prog a enlevé une lettre de argv[] [NOVICE]
Index d'annuaire : Vérifier que la première lettre existe dans un nomTransformer une formule text en un chiffre dans une requete SQL
aide php afficher un chiffre 
Plus de sujets relatifs à : Tri Varchar avec lettre et chiffre ?


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