Abécédaire dynamique

webcrea
WRInaute discret
WRInaute discret
 
Messages: 53
Inscription: 1 Sep 2003

Abécédaire dynamique

Message le Mar Déc 20, 2005 21:12

Bonjour,

Quelqu'un saurait-il comment réaliser un abécédaire dynamique (PHP Mysql) ?
C'est à dire générer l'alphabet et tous les chiffres (chaque lettre et chaque chiffre correspondant à une page dédiée) et avoir sur "la page des a" par exemple uniquement les films (de ma BDD) commençant par "a", tout en évitant les "des", "le", "les" ou "l" au début des titres quand il y en a.


Merci pour votre aide.


absoluteweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 478
Inscription: 22 Nov 2002

Message le Mar Déc 20, 2005 23:04

Bonjour,

Pour la liste alpha numérique déjà, tu définis une variable texte qui sera automatiquement un tableau et tu boucles sur la longueur du tableau :

$alpanum = "ABCDEF...Z0123456789";
for($i=0;$i<len($alphanum);$i++) {

}

Pour la requête sur la lettre, en dehors de lister tous les cas possibles, je ne vois pas :

... WHERE champ LIKE 'A%' OR champ LIKE 'Le A%' OR champ LIKE 'Des A%' etc..

Nicolas.


yazerty
WRInaute passionné
WRInaute passionné
 
Messages: 1682
Inscription: 19 Juin 2005

Message le Mer Déc 21, 2005 2:57

Faire 2 champs dans ta table : titre_affiche - titre_abecedaire (sans les pouich) :- ?


absoluteweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 478
Inscription: 22 Nov 2002

Message le Mer Déc 21, 2005 10:47

yazerty a écrit:Faire 2 champs dans ta table : titre_affiche - titre_abecedaire (sans les pouich) :- ?
Si la base est déjà constituée et qu'elle comporte des milliers d'enregistrement, bonjour le boulot :?
Si la base n'est pas faite ou qu'il y a peu d'enregistrement c'est une bonne solution car cela permettrait également de trier les résultats correctement pour une lettre donnée.

Nicolas.

webcrea
WRInaute discret
WRInaute discret
 
Messages: 53
Inscription: 1 Sep 2003

Message le Mer Déc 21, 2005 11:02

la base existe déjà !
Impossible de faire ce que vous me conseillez.

Je teste de cette manière :
WHERE titre LIKE '$lettre%' OR titre LIKE 'La $lettre%' OR titre LIKE 'L\'$lettre%' comme décrit plus haut mais pour le titre "La planète des singes" par exemple, il figure sous la lettre P et la lettre L également.

Comment résoudre ce pb ?


jerome347
WRInaute impliqué
WRInaute impliqué
 
Messages: 573
Inscription: 19 Mar 2004

Message le Mer Déc 21, 2005 11:09

WHERE titre LIKE '$lettre%'

if($lettre != "L") { OR titre LIKE 'La $lettre%' OR titre LIKE 'L\'$lettre%' }
if($lettre != "D") { OR titre LIKE 'Des $lettre%' OR titre LIKE 'D\'$lettre%' }
if($lettre != "U") { OR titre LIKE 'Un $lettre%' OR titre LIKE 'Une $lettre%' }
...

webcrea
WRInaute discret
WRInaute discret
 
Messages: 53
Inscription: 1 Sep 2003

Message le Mer Déc 21, 2005 11:55

oui, c'est pareil avec cette méthode : "La planète des singes" par exemple figure toujours sous "L" et sous "P"...


jerome347
WRInaute impliqué
WRInaute impliqué
 
Messages: 573
Inscription: 19 Mar 2004

Message le Mer Déc 21, 2005 12:00

Oui, pardon, c'est plutôt :

WHERE titre LIKE '$lettre%'

if($lettre == "L") { AND titre NOT LIKE 'La $lettre%' AND titre NOT LIKE 'L\'$lettre%' } else { OR titre LIKE 'La $lettre%' OR titre LIKE 'L\'$lettre%' }
...


absoluteweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 478
Inscription: 22 Nov 2002

Message le Mer Déc 21, 2005 12:01

WHERE (champ LIKE 'L%' AND champ NOT LIKE 'La %' AND champ NOT LIKE 'Le %' AND ...) OR champ LIKE 'La L%' OR champ LIKE 'Le L%' OR ...

webcrea
WRInaute discret
WRInaute discret
 
Messages: 53
Inscription: 1 Sep 2003

Message le Mer Déc 21, 2005 21:11

Je le teste dans tous les sens mais j'obtiens toujours le même problème.

Voici le code que j'ai mis en place sur vos conseils :

Code: Tout sélectionner
if ($lettre == "l")
{ $where = " AND titre NOT LIKE 'La $lettre%' AND titre NOT LIKE 'Le $lettre%' AND titre NOT LIKE 'Les $lettre%' AND titre NOT LIKE 'L\'$lettre%'"; }
else
{ $where = " OR titre LIKE 'La $lettre%' OR titre LIKE 'Le $lettre%' OR titre LIKE 'Les $lettre%' OR titre LIKE 'L\'$lettre%'"; }

$select = "select id_film,titre,description from films WHERE titre LIKE '$lettre%' $where";


Une autre idée peut-être ? :wink:


absoluteweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 478
Inscription: 22 Nov 2002

Message le Jeu Déc 22, 2005 11:29

absoluteweb a écrit:WHERE (champ LIKE 'L%' AND champ NOT LIKE 'La %' AND champ NOT LIKE 'Le %' AND ...) OR champ LIKE 'La L%' OR champ LIKE 'Le L%' OR ...

webcrea
WRInaute discret
WRInaute discret
 
Messages: 53
Inscription: 1 Sep 2003

Message le Jeu Déc 22, 2005 12:07

Merci Absoluteweb mais avec ce code, seuls les titres commençant vraiment par "L" apparaissent sous toutes les lettres (et aucun autres titres).

C'est vraiment difficile !!

Code: Tout sélectionner
$where = "WHERE (titre LIKE 'L%' AND titre NOT LIKE 'La %' AND titre NOT LIKE 'Le %' AND titre NOT LIKE 'L\'%') OR titre LIKE 'La L%' OR titre LIKE 'Le L%'";
$selabc = "select id_film,titre,description from films $where";
[/code]


absoluteweb
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 478
Inscription: 22 Nov 2002

Message le Jeu Déc 22, 2005 12:18

Bien sûr :lol:
C'est un exemple, mais il n'est pas très difficile de remplacer le L par ".$lettre."...

webcrea
WRInaute discret
WRInaute discret
 
Messages: 53
Inscription: 1 Sep 2003

Message le Jeu Déc 22, 2005 12:24

Oui ! :-)
C'est bon cette fois merci.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités