Methode pour faire un répertoire

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 : Methode pour faire un répertoire

par Ryle » 28 nov. 2007, 17:01

Euh presque.... le substring dans ce cas n'est plus obligatoire, et le pourcent au début non plus puisque tu sais par quelle lettre commence le nom que tu recherches :) :
$sql = "SELECT nom FROM ".$groupes_tbl." WHERE UPPER(nom) LIKE '".$taLettre."%' "; // SELECTION DES GROUPES
$req_liste= mysql_query($sql) or die (mysql_error());
:-*

par supercanard » 28 nov. 2007, 16:18

La fonction " LIKE '$initiale%' " sera à mon avis plus éfficace ;)
En GET ça donne ?

Code : Tout sélectionner

$req_liste= mysql_query("SELECT nom FROM $groupes_tbl WHERE (SUBSTRING(nom, 1, 1)) LIKE ''".$_GET['initiale']."'%' ");
Erreur. Ca m'étonne qu'a moitié vu le nombre de ' :lol:

par supercanard » 28 nov. 2007, 15:38

La fonction " LIKE '$initiale%' " sera à mon avis plus éfficace ;)
oui erreur de frappe ^

par Ryle » 28 nov. 2007, 14:50

Euh presque.... le substring dans ce cas n'est plus obligatoire, et le pourcent au début non plus puisque tu sais par quelle lettre commence le nom que tu recherches :) :
$sql = "SELECT nom FROM ".$groupes_tbl." WHERE UPPER(nom) LIKE '".$taLettre."%' "; // SELECTION DES GROUPES
$req_liste= mysql_query($sql) or die (mysql_error());

par supercanard » 28 nov. 2007, 14:04

La fonction " LIKE '$initiale%' " sera à mon avis plus efficace ;)
Effectivement :

Code : Tout sélectionner

$req_liste= mysql_query("SELECT nom FROM $groupes_tbl WHERE (SUBSTRING(nom, 1, 1)) LIKE '%G%'"); // SELECTION DES GROUPES

par Ryle » 28 nov. 2007, 13:43

La fonction " LIKE '$initiale%' " sera à mon avis plus éfficace ;)

par supercanard » 28 nov. 2007, 13:40

Ah cool excellent le coup du UPPER. C'est génial tout ce qu'on peut faire avec une requête SQL :P

Je commence en même temps à réfléchir à la requête suivante qui va récupérer les entrées dont ma première lettre correspond à l'initiale.

Déjà une petite idée mais pas encore testé :

SELECT nom WHERE (SUBSTRING(nom, 1, 1)) == $initiale FROM $groupes_tbl

Je risque d'avoir de nouveau le problème de casse puisque cette fois il fut pas en tenir compte

Enfin je vais déjà tester ça
Merci encore pour votre grand aide :wink:

par Ryle » 28 nov. 2007, 13:28

N'est il pas ? :)

Pour le problemme de casse, tu peux aussi faire appel à la fonction UPPER() de SQL pour mettre tout en majuscule (ou LOWER en minuscule) après le substring et avant le distinct pour n'avoir que l'un des deux :)

par supercanard » 28 nov. 2007, 13:25

Quand tu dis pas de résultat, tu as essaye un mysql_num_rows() pour le vérifier ? ou tu as essayé d'afficher le code ?

euh..... une question bête... quand tu utilises l'alias "initiale" pour nommer ta colonne dans ta requête SQL... tu penses bien à récupérer la valeur dans le champ $row['initiale'] et non pas $row['nom']

Sinon quelle est ta version de MySQL ?
$row['initiale'] Arffff ben c'est vrai que ça marche mieux que $row['nom'] :lol: :lol: :lol:

Edit : Par contre c'est sensible à la casse. Bon la faut que je regarde mais mes champs varchar sont en UTF bin c'est peut être le souci

par Ryle » 28 nov. 2007, 13:19

Quand tu dis pas de résultat, tu as essaye un mysql_num_rows() pour le vérifier ? ou tu as essayé d'afficher le code ?

euh..... une question bête... quand tu utilises l'alias "initiale" pour nommer ta colonne dans ta requête SQL... tu penses bien à récupérer la valeur dans le champ $row['initiale'] et non pas $row['nom']

Sinon quelle est ta version de MySQL ?

par supercanard » 28 nov. 2007, 12:43

Code : Tout sélectionner

$req_test= mysql_query("SELECT nom FROM $groupes_tbl");
-> Ca c'est ok

Code : Tout sélectionner

$req_test= mysql_query("SELECT SUBSTR(nom, 1, 1) AS initiale FROM $groupes_tbl");
-> Pas de résultat, pas d'erreur

Code : Tout sélectionner

$req_test= mysql_query("SELECT DISTINCT nom FROM $groupes_tbl");
-> Ca c'est ok

Code : Tout sélectionner

$req_test= mysql_query("SELECT DISTINCT(SUBSTRING(nom, 1, 1)) AS initiale FROM $groupes_tbl");
-> Pas de résultat, pas d'erreur

Code : Tout sélectionner

$req_test= mysql_query("SELECT DISTINCT(SUBSTRING(nom, 1, 1)) FROM $groupes_tbl");
-> pas de résultat, pas d'erreur

J'ai essayé un peu tout

:?

par Ryle » 28 nov. 2007, 12:26

Essayes là dans phpMyAdmin... commence sans le distinct et éventuellement le nom de la colonne à côté, pour vérifier que tu récupères bien les initiales de chaque enregistrement... puis vire le nom, ajoute le distinct, etc. faut procéder par étape quand ça bug pour trouver d'où ça vient :)

Au pire donne nous la structure de ta table, la requête génétée et un bout de code :)

Pour SUBSTRING et SUBSTR, en SQL c'est la même chose ;)

par supercanard » 28 nov. 2007, 11:42

Note bien qu'il a parlé d'un DISTINCT non sur le mot complet mais sur un SUBSTRING() à savoir la première lettre des mots : en d'autre terme, tu cherches les initiales, ça devrait donner une requête du genre :

Code : Tout sélectionner

SELECT DISTINCT(SUBSTRING(ta_colonne, 1, 1)) AS initiale FROM ta_table;
Ah je comprends =)
Ceci dit ça ne me retourne aucun résultat. J'ai essayé avec SUBSTR au lieu de SUBSTRING mais c'est pareil. Pourtant après recherche dans google ça à l'air juste cette requête...

par Cyrano » 28 nov. 2007, 07:14

Note bien qu'il a parlé d'un DISTINCT non sur le mot complet mais sur un SUBSTRING() à savoir la première lettre des mots : en d'autre terme, tu cherches les initiales, ça devrait donner une requête du genre :

Code : Tout sélectionner

SELECT DISTINCT(SUBSTRING(ta_colonne, 1, 1)) AS initiale FROM ta_table;

par supercanard » 28 nov. 2007, 00:50

Ça aura pas été bien long

Je sais pas pourquoi je pensais à faire un DISTINCT tout à l'heure, mais en même temps Ryle toi aussi tu en parle donc il doit bien en avoir besoin d'un. Mais :

Champs nom :
Toto
Tutu
Titi

Si je fait SELECT DISTINCT nom, ben je récupère tous les noms qui ne sont pas en double, donc toute la liste. Le but et plutôt d'en récupérer un seul dans cette liste et de faire un subsrt dessus.

A moins que le substr se fasse directement dans la requête ? :?