[PHP/MySQL ] Classement par lettre

Classement par lettre [PHP/MySQL ] - PHP - Programmation

Marsh Posté le 26-01-2003 à 10:56:44    

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?

Reply

Marsh Posté le 26-01-2003 à 10:56:44   

Reply

Marsh Posté le 26-01-2003 à 12:25:59    

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
Reply

Marsh Posté le 26-01-2003 à 13:27:08    

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 ?

Reply

Marsh Posté le 26-01-2003 à 13:31:10    

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

Reply

Marsh Posté le 26-01-2003 à 13:37:42    

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 ?

Reply

Marsh Posté le 26-01-2003 à 13:55:57    

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
Reply

Marsh Posté le 26-01-2003 à 17:27:52    

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:

Reply

Marsh Posté le 26-01-2003 à 18:01:03    

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

Reply

Marsh Posté le 26-01-2003 à 18:23:49    

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:

Reply

Marsh Posté le 26-01-2003 à 18:37:11    

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
Reply

Marsh Posté le 26-01-2003 à 18:37:11   

Reply

Marsh Posté le 26-01-2003 à 18:39:30    

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 )

Reply

Marsh Posté le 26-01-2003 à 18:39:47    

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.

Reply

Marsh Posté le 26-01-2003 à 18:42:26    

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..

Reply

Marsh Posté le 26-01-2003 à 18:50:07    

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
Reply

Marsh Posté le 26-01-2003 à 18:50:21    

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
Reply

Marsh Posté le 26-01-2003 à 18:51:24    

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
Reply

Marsh Posté le 26-01-2003 à 18:51:59    

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

Reply

Marsh Posté le 26-01-2003 à 18:52:19    

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:

Reply

Marsh Posté le 26-01-2003 à 18:54:09    

L0k a écrit :

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


 
 :o


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 26-01-2003 à 18:57:39    

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
Reply

Marsh Posté le 26-01-2003 à 18:58:17    

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

Reply

Marsh Posté le 26-01-2003 à 19:07:11    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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