Classer par ordre alphabétique sans prendre en compte les x premières lettres

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Classer par ordre alphabétique sans prendre en compte les x premières lettres

par jpsartre » 19 nov. 2007, 11:22

Merci pour votre aide, je vais faire comme cela.

Merci encore

par Truc » 18 nov. 2007, 22:03

Ma solution pourrai se faire en coupant à l'espace apres "le" et "la" mais marche plus pour "l'" o|u il faudrait l'apostrophe.
Je pense que les performances ne seraient pas au top en effectuant le tri sur ce deux cas.

La proposition d'@rthur semble meilleure pour ton cas.
Tu peux te faire un script pour le faire de manière automatique pour les valeurs déjà enregistrée et adapter 2 lignes de code sur ton script actuel pour couper suivant l'espace ou l'apostrophe pour enregistrer dans deux champs.

par jpsartre » 18 nov. 2007, 19:14

J'ai essayé en vain les deux solutions proposées,
Je ne vois pas où générer ma liste dans le code proposé car le dernier tri est sorti de la boucle... je ne comprends pas.
J'ai essayé aussi le code de truc mais je ne vois pas comment l'adapter.
Si quelqu'un peut m'aider encore un peu...
Au pire il me restera la solution (fastidieuse mais sûre) qui consistait à laisser ajouter un champ pour l'article (le, la, l'...) mais si je peux éviter, c'est que j'ai beaucoup de valeurs déjà enregistrées...

Merci

par Kaoteknik » 18 nov. 2007, 11:35

Une autre solution serait peut-être de récupérer les enregistrements dans la base de données, les "couper" à l'aide de la fonction explode, les insérer dans un tableau, puis trier ce tableau en toute fin...

J'ai écrit ce code sans l'avoir testé... A voir :
<?php

// Ici j'enlève la clause ORDER BY. On effectuera le tri plus loin...
$req_client ="SELECT clients_id, label FROM ld_clients";
$req_client = mysql_query($req_client) or die("Echec de la requête<br/>".mysql_error());

// On crée un tableau contenant les particules des noms
$particules = array('Le ', 'La ', 'L\'', 'De ', 'De la ', 'De l\'', 'Du ');

// On initialise $label_c
$label_c = array();

while ($data_client = mysql_fetch_assoc($req_client)) {
	// On scinde les particules et les noms en deux entitées 
	$cut = explode($particules, $data_client['label']);
	// On replace la particule à la fin du nom entre parenthèses
	$label_c[] = $cut[1].' ('.$cut[0].')';
}

// On effectue le tri une fois les chaînes traitées
rsort($label_c);

?>

par @rthur » 18 nov. 2007, 11:15

Bonjour,

Ce que tu cherches à faire doit être possible avec une grosse requête SQL, toutefois, je te conseillerai plutôt de rajouter un champ "nom_classement_alpha" dans lequel tu stockerai le nom de tes clients sans la particule le | la | l'

Car si à chaque fois que tu veux afficher la liste de tes clients tu es obligé de faire une requête SQL qui va demander pas mal de calcul à MySQL, tu va gaspiller des ressources pour rien (et ralentir l'affichage de tes pages par la même occasion)

par Patriboom » 18 nov. 2007, 04:17

D'entrée, je miserais sur une adaptation de la formule de Truc:
http://www.phpfrance.com/forums/viewtop ... b6e60acf71

Classer par ordre alphabétique sans prendre en compte les x

par jpsartre » 18 nov. 2007, 03:15

Bonjour,

Je dois classer par ordre alphabétique des noms mais certains commencent par le ou la ou l', par exemple : Le castor doit apparaître à la lettre C malgré le Le.
Comment faire pour classer par ordre alphabétique malgré cela ? Si quelqu'un peut m'aider, je ne vois pas trop comment faire...
		<?php
		$i = 0;
		$req_client ="SELECT clients_id,label FROM ld_clients ORDER BY clients_id DESC";
		$req_client = mysql_query($req_client) or die("Echec de la requête<br/>".mysql_error());
		
		while($data_client = mysql_fetch_array($req_client)) 
		{
			$label_c  	= $data_client['label'];
			$id_c		= $data_client['clients_id'];
			$url_c 		= rewriteURL($label_c)."-client-".$id_c.".html";
		?>
			<li><a href="<?php echo $url_c?>"><?php echo $label_c?></a></li>

        <?php
			$i++;
		}
		?>
Merci