Requete SQL

Requete SQL - PHP - Programmation

Marsh Posté le 11-02-2005 à 12:58:22    

Hello !
je cherche une requete me permettant d'afficher une liste triée par ordre alphabétique en commençant par une lettre spécifique...
 
exemple j'ai plusieurs enregistrements :
 
alain
bernard
charles
claude
eric
fred
francois
...
 
si je veux recuperer les prenoms à partir de la lettre "C" il va me retourner :
 
charles
claude
eric
fred
francois
...
 
 
... pour l'instant j'ai fait :
 
SELECT * FROM table WHERE prenom LIKE '%C'
 
... mais il me retourne que les prenoms commençants par C...  
mais moi je veux les suivants !
 
Comment qu'on fait ?
 
Merci
Freed

Reply

Marsh Posté le 11-02-2005 à 12:58:22   

Reply

Marsh Posté le 11-02-2005 à 12:59:54    

deja c'est C% pas %c :D
 
sinon c'est une bonne question [:huit] ( [:drapo] )

Reply

Marsh Posté le 11-02-2005 à 13:00:27    

oui je me suis trompé en retapant ma requete ! lol !

Reply

Marsh Posté le 11-02-2005 à 13:01:56    

SELECT * FROM table WHERE prenom LIKE '%C' OR prenom LIKE '%D' OR prenom LIKE '%E' .... etc  
 
Ca m'etonnerait qu'il y ai un truc tout cuit en SQL...
en fait moi je ferai un tableau associatif avec un constructeur de requête [:spamafote]


Message édité par simogeo le 11-02-2005 à 13:02:18

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-02-2005 à 13:02:35    

et ca n'as aucun rapport avec PHP :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-02-2005 à 13:03:34    

KangOl a écrit :

et ca n'as aucun rapport avec PHP :o


... je pense qu'on va y arriver tres rapidement (surtout si SQL ne me le permet pas directement !)

Reply

Marsh Posté le 11-02-2005 à 13:05:32    

SELECT * FROM newsletter WHERE email REGEXP '(%C|%D|%E|...);'
 
ca marche ca ?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-02-2005 à 13:06:48    

donc... si je comprends bien SQL ne permets pas ça... le probleme c'est que mon cas est encore plus particulier....
 
je veux qu'il affiche tous les resultats commencant par le masque que le mec tape dans un champ de formulaire... genre il veut que tous les noms commencants par "CHA" s'affichent... ainsi que les suivants... ça se complique !

Reply

Marsh Posté le 11-02-2005 à 13:07:37    

simogeo a écrit :

SELECT * FROM newsletter WHERE email REGEXP '(%C|%D|%E|...);'
 
ca marche ca ?


j'y ai pensé au regex.. je vais essayer

Reply

Marsh Posté le 11-02-2005 à 13:08:20    

ainsi que les suivant :/
ca s'est autre chose ...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-02-2005 à 13:08:20   

Reply

Marsh Posté le 11-02-2005 à 13:10:08    

freed102 a écrit :

j'y ai pensé au regex.. je vais essayer


 
je viens de jeter un oeil sur la doc [:franck75]
http://dev.mysql.com/doc/mysql/fr/regexp.html
 
ca serait plutôt un truc du style :
 

Code :
  1. SELECT * FROM newsletter WHERE email REGEXP '(^C*|^D*|^E*|...);'


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-02-2005 à 13:12:54    

donc,je viens de faire ça :
 

Code :
  1. switch ($_SESSION['consult_by'])
  2.   {
  3.  case "numero_rapport" :
  4.       $sql="SELECT * FROM claimsi WHERE numero_rapport LIKE '$numero_rapport%'";
  5.     $req=mysql_query($sql);
  6.     $numrows=mysql_num_rows($req);
  7.     //$data=mysql_fetch_array($req);
  8.     break;
  9.   case "nom" :
  10.      $sql="SELECT * FROM claimsi WHERE nom REGEXP ('^$nom*') ORDER BY nom ASC";
  11.     $req=mysql_query($sql);
  12.     $numrows=mysql_num_rows($req);


 
mais il m'affiche tout ! :(

Reply

Marsh Posté le 11-02-2005 à 13:14:01    

ou plutot quelque chose comme ca :

Code :
  1. SELECT * FROM newsletter WHERE tolower(email) REGEXP '^[c-z]';


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-02-2005 à 13:16:06    

ouaiiiiiii... on s'en rapproche là ! :)

Reply

Marsh Posté le 11-02-2005 à 13:17:39    

ça marche dans le cas d'une lettre...
mais si je tape plusieurs lettres ça affiche n'importe quoi ! :lol:

Reply

Marsh Posté le 11-02-2005 à 13:17:52    

$sql="SELECT * FROM claimsi WHERE nom REGEXP ('^[$nom-z]') ORDER BY nom ASC";

Reply

Marsh Posté le 11-02-2005 à 13:27:02    

...
SELECT * FROM claimsi WHERE nom LIKE '%C%' ORDER BY nom ASC
 
ca te cherchera tout les noms ayant un C quelque soit sa place, et classé par ordre alphabetique

Reply

Marsh Posté le 11-02-2005 à 13:29:21    

spike a écrit :

...
SELECT * FROM claimsi WHERE nom LIKE '%C%' ORDER BY nom ASC
 
ca te cherchera tout les noms ayant un C quelque soit sa place, et classé par ordre alphabetique


 
ouai ça je sais mais dans mon cas c pas bon, je veux uniquement les noms commencant par C... et les autres apres la lettre C... mais par exemple si un mec s'appelle "Alberic" ... bah dans ta formule il va apparaitre ! et moi je veux pas ! lol !

Reply

Marsh Posté le 11-02-2005 à 13:32:37    

freed102 a écrit :

ouai ça je sais mais dans mon cas c pas bon, je veux uniquement les noms commencant par C... et les autres apres la lettre C... mais par exemple si un mec s'appelle "Alberic" ... bah dans ta formule il va apparaitre ! et moi je veux pas ! lol !


bah ca alors :
SELECT *  
FROM table WHERE left( nom, 1 ) BETWEEN 'C' AND 'Z'
ORDER BY nom ASC
ca marche :D


Message édité par Profil supprimé le 11-02-2005 à 13:33:13
Reply

Marsh Posté le 11-02-2005 à 13:53:12    

freed102 a écrit :

$sql="SELECT * FROM claimsi WHERE nom REGEXP ('^$nom*') ORDER BY nom ASC";


 
Hmmm, dans les regexp, si tu veux dire "tous les characteres" c'est "." qu'il faut utiliser et non "*".
Donc :

Code :
  1. $sql="SELECT * FROM claimsi WHERE nom REGEXP ('^$nom.') ORDER BY nom ASC";


Message édité par cerel le 11-02-2005 à 13:54:18
Reply

Marsh Posté le 11-02-2005 à 14:04:37    

simogeo a écrit :

je viens de jeter un oeil sur la doc [:franck75]
http://dev.mysql.com/doc/mysql/fr/regexp.html
 
ca serait plutôt un truc du style :
 

Code :
  1. SELECT * FROM newsletter WHERE email REGEXP '(^C*|^D*|^E*|...);'



Oh bordel :eek: je savais pas qu'on pouvait utiliser des regexp dans les requêtes sql :love:  :love: merci :jap:

Reply

Marsh Posté le 11-02-2005 à 14:10:36    

FlorentG a écrit :

Oh bordel :eek: je savais pas qu'on pouvait utiliser des regexp dans les requêtes sql :love:  :love: merci :jap:


j'aurais jamais pensé non plus à balancer une syntaxe comme ça à MySQL !!!
Il est quand meme bien ce forum, tout plein des choses on y apprend  :D


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 11-02-2005 à 14:11:22    

SELECT * FROM newsletter WHERE tolower(email) REGEXP '^[c-z]+';

:??:

Reply

Marsh Posté le 11-02-2005 à 14:11:41    

Xav_ a écrit :

j'aurais jamais pensé non plus à balancer une syntaxe comme ça à MySQL !!!
Il est quand meme bien ce forum, tout plein des choses on y apprend  :D

Ouais, y'a vraiment une quantité de matière cérébrale extrèmement importante et bénéfique :)

Reply

Marsh Posté le 11-02-2005 à 14:22:40    

select¨* from table
where prenom >= 'c%'
order by prenom

Reply

Marsh Posté le 11-02-2005 à 14:37:59    

J'aurai dit  
select¨* from table
where prenom >= 'c'
order by prenom
 
Avec MySql je sais que ca ne posera pas de soucis,
en revanche je ne sais pas si c'est du SQL "normé"
 
Pour ce qui est du  REGEXP '(%C|%D|%E|...);' et CIE,
A EVITER car totalement inutile  :sweat:  
 
Le % ne sert pas est bouffe de la ressource
Je pense que pour les majuscules,
ya pas d'problème


Message édité par rompi le 11-02-2005 à 14:38:48
Reply

Marsh Posté le 11-02-2005 à 14:38:40    

la plus proche de ce que je veux pour l'instant c celle là :
 
$sql="SELECT * FROM claimsi WHERE nom REGEXP ('^[$nom-z]') ORDER BY nom ASC";

Reply

Marsh Posté le 11-02-2005 à 14:40:55    

faut rajouter un + pour que ca prenne plusieur caratère :o

Reply

Marsh Posté le 11-02-2005 à 14:42:57    

tu parles à qui chacal_one333 ?

Reply

Marsh Posté le 11-02-2005 à 14:48:19    

ouai je sais je suis pas tres fort en Regex !

Reply

Marsh Posté le 11-02-2005 à 14:49:49    

tu n'as pas surtout pas besoin de regex pour ton truc...

Reply

Marsh Posté le 11-02-2005 à 14:50:11    

en effet rompi, c'est un peu moins prise de tete que ma requete citée plu haut, je pensais plus au signes < > avec les lettres
 

spike a écrit :

bah ca alors :
SELECT *  
FROM table WHERE left( nom, 1 ) BETWEEN 'C' AND 'Z'
ORDER BY nom ASC
ca marche :D


 
i'm boulay


Message édité par Profil supprimé le 11-02-2005 à 14:50:58
Reply

Marsh Posté le 11-02-2005 à 14:51:48    

And the winner is :
 
$sql="SELECT * FROM claimsi WHERE nom >= '$nom' ORDER BY nom ";
 

Reply

Marsh Posté le 11-02-2005 à 14:52:26    

thanx Rompi ! (et merci à tous les autres aussi ! :) )

Reply

Marsh Posté le 11-02-2005 à 14:58:44    

FlorentG a écrit :

Ouais, y'a vraiment une quantité de matière cérébrale extrèmement importante et bénéfique :)


 
tu m'étonnes [:franck75]
 
 

rompi a écrit :

J'aurai dit  
select¨* from table
where prenom >= 'c'
order by prenom


 
a ui ... on est trop con  :sweat:  
edit : en même temps ... c bien cheloud  ....  [:southpark1]  
 

rompi a écrit :


Pour ce qui est du  REGEXP '(%C|%D|%E|...);' et CIE,
A EVITER car totalement inutile  :sweat:  
 
Le % ne sert pas est bouffe de la ressource
Je pense que pour les majuscules,
ya pas d'problème


 
uiui ... nan mais j'ai pas dis que c'tait la syntaxe heinnn :o.. j'ai juste balancé une piste [:veryfree]
 

chacal_one333 a écrit :

faut rajouter un + pour que ca prenne plusieur caratère :o


 
mais ué quoi [:icon8]
 
[:dawacube]


Message édité par simogeo le 11-02-2005 à 14:59:36

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-02-2005 à 15:17:03    

simogeo a écrit :


edit : en même temps ... c bien cheloud  ....  [:southpark1]  


 
Bah c pas si chelou que ça ! yaka regarder dans ton repertoire téléphonique (bien que ça depende des téléphones)... mais su mon Nokia... tu tapes une ou plusieurs lettres et hop ! ça pointe vers le nom le plus proche dans la liste !
 
bah là c pareil ! c un peu un pointeur dans une liste de noms ! et l'avantage c'est que si tu connais pas l'orthographe exacte du nom.. bah il t'affiche les noms les plus proches


Message édité par freed102 le 11-02-2005 à 15:20:00
Reply

Marsh Posté le 11-02-2005 à 15:26:37    

freed102 > je parle de la syntaxe/sémantique SQL...
 
sémantiquement, dire qu'un champ de type text est supérieur ou  égal à un lettre c'est un non sens! (mais c'est bien que ca marche heinn :o ) Je serais curieux de savoir si c'est standard en SQL


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-02-2005 à 15:29:20    

Je suis d'accord, je ne suis pas certain que cela fasse parti d'une des normes de SQL

Reply

Marsh Posté le 11-02-2005 à 15:33:09    

[:romf]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 11-02-2005 à 15:37:10    

ah okok ! autant pour moi ! :jap:
 
effectivement ça n'a pas bcp de sens sauf si on considere que A est la premiere lettre et Z la 26eme ... là on peut trier avec >= non ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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