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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/MySQL ] Classement par lettre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/MySQL ] Classement par lettre

n°294222
L0k
Posté le 26-01-2003 à 10:56:44  profilanswer
 

Je dois gérer un grand nombre de titres de film, et il faudrait que je puisse afficher tout les films commençant par la lettre a, b, etc dans une page différente les noms de films sortent d'une base de donnée MySQL. Comment feriez vous ça?

mood
Publicité
Posté le 26-01-2003 à 10:56:44  profilanswer
 

n°294253
sielfried
Posté le 26-01-2003 à 12:25:59  profilanswer
 

WHERE nom LIKE 'A%' te sort tous les films commençant par A.
 
Pour faire ta liste de lettres un truc comme ça (que tu peux améliorer ensuite pour pas avoir de '-' à la fin ou pour ne pas avoir de lien sur la lettre où tu es déjà) :
 

Code :
  1. for ($i = 65; $i < 91; $i++)
  2. {
  3. $c = chr($i);
  4. echo '<a class=small href="tapage.php?initiale='.$c.'">'.$c.'</a> - ';
  5. }


Message édité par sielfried le 26-01-2003 à 12:26:25

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°294264
L0k
Posté le 26-01-2003 à 13:27:08  profilanswer
 

ok merci bcp, mais je suis newbies et je dois t'avouer que ta boucle for je pige pas trop ce que tu fais dedans mdr, tu peux me la commenter ?

n°294266
L0k
Posté le 26-01-2003 à 13:31:10  profilanswer
 

Ha ben en incluant le code dans une page j'ai tout de suite compris  :lol:  
 
Merci

n°294268
L0k
Posté le 26-01-2003 à 13:37:42  profilanswer
 

Encore une question, si le titre ne commence pas par une lettre mais par une chiffre ou peu importe, comment regrouper tout les titre qui ne commencent pas par une lettre ?

n°294271
L0k
Posté le 26-01-2003 à 13:55:57  profilanswer
 

J'ai déja modifier comme çA :
 

Code :
  1. for ($i = 65; $i < 91; $i++)
  2.   {
  3.      $c = chr($i);
  4.    
  5.     if ($initiale == $c)
  6.     {
  7.      print("<font color=\"#FF0000\">$c " );
  8.     }
  9.     else
  10.     {
  11.      print("<a class=small href=\"mapage.php?initiale=$c\"><font color=\"#FF0000\">$c</a> " );
  12.     }
  13.   }


 
Voila


Message édité par L0k le 26-01-2003 à 15:50:20
n°294356
L0k
Posté le 26-01-2003 à 17:27:52  profilanswer
 

Je repose ma question, comment sélectionner un groupe de titre de film qui ne commencent pas par une lettre ?  
 
 
Je fais comme ça :
 

Code :
  1. $query = "SELECT * FROM $table WHERE titre LIKE '$initiale%'";


 
Ce que je ne sait pas c'est comment donner les valeurs de 0 - 9 pour la variable $initiale en une seule fois, pas la valeur 1 et ensuite 2 etc..  :ange:

n°294365
mrbebert
Posté le 26-01-2003 à 18:01:03  profilanswer
 

Bonne question :)  
 
Ca fait un peu bidouillage mais peut être un truc comme ca :
WHERE (titre < 'aaaaa';) AND (titre > 'zzzzz';)

n°294387
L0k
Posté le 26-01-2003 à 18:23:49  profilanswer
 

mrBebert a écrit :

Bonne question :)  
 
Ca fait un peu bidouillage mais peut être un truc comme ca :
WHERE (titre < 'aaaaa';) AND (titre > 'zzzzz';)


 
:??: Huhu pas convaincu.. Je dois te dire que la je suis un peu paumé  :cry:

n°294389
sielfried
Posté le 26-01-2003 à 18:37:11  profilanswer
 

L0k a écrit :

Encore une question, si le titre ne commence pas par une lettre mais par une chiffre ou peu importe, comment regrouper tout les titre qui ne commencent pas par une lettre ?


 
Ce que tu peux faire c'est dans ta boucle for, un truc du genre :
 
$cond .= "AND titre NOT LIKE '".$c."%'";
 
Au final $cond vaudra :
"AND titre NOT LIKE 'A%' AND titre NOT LIKE 'B%' AND titre NOT LIKE 'C%'.........."
 
S'il a choisi une initiale "spéciale" tu rajoutes $cond dans ta requête et valà. Si y'a pas déjà un WHERE dans ta requête faut rajouter WHERE 1 avant, par contre.


Message édité par sielfried le 26-01-2003 à 18:40:51

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
mood
Publicité
Posté le 26-01-2003 à 18:37:11  profilanswer
 

n°294390
mrbebert
Posté le 26-01-2003 à 18:39:30  profilanswer
 

L0k a écrit :


 
:??: Huhu pas convaincu.. Je dois te dire que la je suis un peu paumé  :cry:  

Par ordre alphabétique, les titres ne commençant pas par une lettre seront soit < 'a' soit > 'zzzzz' (à moins que tu n'ais un titre commençant par 5 z :D )

n°294391
L0k
Posté le 26-01-2003 à 18:39:47  profilanswer
 

Sielfried a écrit :


 
Ce que tu peux faire c'est dans ta boucle for, un truc du genre :
 
$cond .= "AND titre NOT LIKE '".$c."'";
 
Au final $cond vaudra :
"AND titre NOT LIKE 'A%' AND titre NOT LIKE 'B%' AND titre NOT LIKE 'C%'.........."
 
S'il a choisi une initiale "spéciale" tu rajoutes $cond dans ta requête et valà. Si y'a pas déjà un WHERE dans ta requête faut rajouter WHERE 1 avant, par contre.


 
T'aurais pas le temps de me modifier ma boucle en dessus comme example parce que la je commence a fatiguer je crois.. Niveau compréhension je suis plus au top.

n°294393
L0k
Posté le 26-01-2003 à 18:42:26  profilanswer
 

mrBebert a écrit :

Par ordre alphabétique, les titres ne commençant pas par une lettre seront soit < 'a' soit > 'zzzzz' (à moins que tu n'ais un titre commençant par 5 z :D )


 
Ouaip j'ai compris ce que tu voualis faire, l'idée est pas bête sur le principe ça marche, mais g encore quelques problèmes, mais je pense réussir, en fait en plus de la condition que seuls les films commençant par une lettre s'affiche je crée encore plusieurs page si jamais il y a bcp de film et c la qui a 2 3 problèmes mais je pense pouvoir corriger..

n°294396
mrbebert
Posté le 26-01-2003 à 18:50:07  profilanswer
 

L0k a écrit :


 
Ouaip j'ai compris ce que tu voualis faire, l'idée est pas bête sur le principe ça marche, mais g encore quelques problèmes, mais je pense réussir, en fait en plus de la condition que seuls les films commençant par une lettre s'affiche je crée encore plusieurs page si jamais il y a bcp de film et c la qui a 2 3 problèmes mais je pense pouvoir corriger..

A priori, ca peut se faire avec 2 paramètres pour la page.
- lettre : qui contient la première lettre. (avec le cas particulier de ceux qui ne commencent pas par une lettre, par exemple, en passant le paramètre "0" ).
- le numéro de page.
 
Dans ton script, tu génère la condition WHERE de ta requête en fonction de la lettre, et le LIMIT en fonction du numéro de page.


Message édité par mrbebert le 26-01-2003 à 18:50:48
n°294397
sielfried
Posté le 26-01-2003 à 18:50:21  profilanswer
 

if ($initiale == "noin" )
    {
     print("<font color=\"#FF0000\"># " );
    }
    else
    {
     print("<a class=small href=\"mapage.php?initiale=noin\"><font color=\"#FF0000\">#</a> " );
    }
 
for ($i = 65; $i < 91; $i++)
  {
     $c = chr($i);
     $cond .= "AND titre NOT LIKE '".$c."'";  
    if ($initiale == $c)
    {
     print("<font color=\"#FF0000\">$c " );
    }
    else
    {
     print("<a class=small href=\"mapage.php?initiale=$c\"><font color=\"#FF0000\">$c</a> " );
    }
  }
 
Dans ta requête :
$query = "SELECT * FROM $table WHERE ".($initiale == "noin" ? "1 ".$cond : "titre LIKE '$initiale%'" );


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°294398
sielfried
Posté le 26-01-2003 à 18:51:24  profilanswer
 

mrBebert a écrit :

Par ordre alphabétique, les titres ne commençant pas par une lettre seront soit < 'a' soit > 'zzzzz' (à moins que tu n'ais un titre commençant par 5 z :D )


 
< et > marchent avec des chaînes ? C'est sûr ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°294399
L0k
Posté le 26-01-2003 à 18:51:59  profilanswer
 

voila un de mes problèmes :
 
Pour le code :
 

Code :
  1. $query = "SELECT * FROM $table WHERE titre (titre < 'A') OR (titre > 'zzzzz')";
  2. $result = mysql_query($query, $connect);
  3. $nb_total = mysql_num_rows($result);


 
J'ai l'erreur : Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp\www\test.php on line 53
 
Par contre le code :
 

Code :
  1. $query = "SELECT * FROM $table WHERE titre LIKE '$initiale%'";
  2. $result = mysql_query($query, $connect);
  3. $nb_total = mysql_num_rows($result);


 
Marche très bien  :(  

n°294401
mrbebert
Posté le 26-01-2003 à 18:52:19  profilanswer
 

Sielfried a écrit :


 
< et > marchent avec des chaînes ? C'est sûr ?

non :D  
 
Faudrait tester mais j'ai la flemme d'installer mysql là tout de suite :whistle:

n°294402
sielfried
Posté le 26-01-2003 à 18:54:09  profilanswer
 

L0k a écrit :

$query = "SELECT * FROM $table WHERE titre (titre < 'A';) OR (titre > 'zzzzz';)";


 
 :o


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°294406
sielfried
Posté le 26-01-2003 à 18:57:39  profilanswer
 

mrBebert a écrit :

non :D  
 
Faudrait tester mais j'ai la flemme d'installer mysql là tout de suite :whistle:  


 
Ca marche :o  
 
Et dire que je me faisais chier avec mes 26 WHERE NOT LIKE :/


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°294407
L0k
Posté le 26-01-2003 à 18:58:17  profilanswer
 

:pt1cable:  lol lol faut vraiment que je prenne des vacances moi mdr

n°294413
L0k
Posté le 26-01-2003 à 19:07:11  profilanswer
 

C'est tout bon j'ai enfin réussi a faire ce que je voulais merci les gars

mood
Publicité
Posté le   profilanswer
 


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

  [PHP/MySQL ] Classement par lettre

 

Sujets relatifs
[PHP MYSQL] Empêcher de flooder[PHP]Comment protéger des fichiers PHP ?
[php & mysql] Requête simple, mais pb[Mysql] connexion avec ODBC
[PHP]Petite question sur sizeofGestion du id unique dans mysql
[Mysql] combinés 2 requetes en une seule :/[PHP] forcer le téléchargement avec DAP par exemple
[PHP] sessions sous windows et sous IIS 
Plus de sujets relatifs à : [PHP/MySQL ] Classement par lettre


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