Comment faire pour voir un un champ existe déjà ? [PHP + MySQL] - Programmation
Marsh Posté le 12-12-2001 à 18:17:32
Code :
|
Marsh Posté le 12-12-2001 à 18:18:50
oui, ou :
$query="SELECT count(ID) AS nbLogin FROM users WHERE login='$login'";
$result=mysql_query($query));
if ($result->nbLogin!=0){
ecrire "Erreur, login déjà pris";
}
Marsh Posté le 12-12-2001 à 18:19:19
skylight a écrit a écrit :
|
pq un like ??
Marsh Posté le 12-12-2001 à 18:20:23
ethernal a écrit a écrit : pq un like ?? |
case UNsensitive (ignore la casse)
Marsh Posté le 12-12-2001 à 20:28:33
plutot ceci -> mieux optimisé au niveau SQL et PHP
$res=mysql_query("SELECT ID FROM users WHERE login LIKE '$login' LIMIT 1" );
if(mysql_num_rows($res)) echo "Login pris";
voila, le tout sur 2 lignes .. tu peux rajouter un DIE a la place du echo ou autre suivant tes besoins
Marsh Posté le 12-12-2001 à 20:43:52
j'ai jamais essayé mais tu dois peut etre pouvoir tout mettre sur 1 ligne meme si ca change pas grand chose au niveau des perfs :
if( mysql_num_rows(mysql_query("SELECT ID FROM users WHERE login LIKE '$login' LIMIT 1" )) ) echo "Login pris";
Marsh Posté le 12-12-2001 à 23:49:31
potiron a écrit a écrit : plutot ceci -> mieux optimisé au niveau SQL et PHP $res=mysql_query("SELECT ID FROM users WHERE login LIKE '$login' LIMIT 1" ); if(mysql_num_rows($res)) echo "Login pris"; voila, le tout sur 2 lignes .. tu peux rajouter un DIE a la place du echo ou autre suivant tes besoins |
puisqu'on a dit précédemment que
"select count(id)"
était plus optimisé pour compter que
$result= mysql_query("select id from ..." );
nb= mysql_num_rows($result);
select count(id) as NB from ...";
est plus optimisé que ce que tu dis.
mais je n'ai jamais testé, j'ai cru les autres sur parole...
Marsh Posté le 13-12-2001 à 00:06:42
comment savoir quelle requete sera plus rapide qu'une autre ?
Marsh Posté le 13-12-2001 à 00:18:19
ethernal : suis pas d'accord, en faisant un count (id) tu forces la requete a passer sur TOUTES les lignes de ta table hors le but est qu'elle ne lit que tres peu de ligne ...
s0d4 : ben fait un bench, c'est tres important de verifier que ta prog/requete sont aux max de leurs capacités !
pour mysql tu as une fonction GENIAL qui s'appelle EXPLAIN .... si tu as des conf partout sur des requetes multi-tables alors tu peux etre content de toi .
pour PHP la seule soluce que je connaisse c'est de faire un script de bench en calculant le temps en microscondes en 2 actions .
je me suis fait une super interface justement pour tester toutes mes fonctions/idées ... ou je donne le Nb de boucle, et elle fait des moyennes en stockant tout ca dans cookies et txt .
j'ai aussi une fonction qui me permet d'etalonner le bench suivant le PC en le faisant tourner a vide !
n'hesite pas a te faire un script pour tes benchs, c'est tres tres important car des que tu vas passer sur des tables contenant des millions de lignes tu peux pas te permettre la moindre imperfection .
Marsh Posté le 13-12-2001 à 00:31:03
potiron a écrit a écrit : ethernal : suis pas d'accord, en faisant un count (id) tu forces la requete a passer sur TOUTES les lignes de ta table hors le but est qu'elle ne lit que tres peu de ligne ... |
bha chai pas... si tu fais un count(id) where login like '$login' il te retournera qu'une seule ligne, mais c vrai qu'il parcourt les enregs jusqu'a la fin.
faut voir si qd tu lui mets un LIMIT, il s'arrête après avoir trouvé une ligne ou bien s'il continue jusqu'au bout et qu'il ne t'en retourne qu'une dans le recordset... s'ils ont bien codé mysql, c'est ce que ça devrait faire. Mais je connais pas assez le développement de MySQL pour en être sûr.
Si tu me l'affirmes je te crois
Marsh Posté le 13-12-2001 à 00:39:25
ben c'est pour ca que j'ai rajouté LIMIT 1 dans ma requete !
il ce limite a 1 resultat donc des qu'il le trouve il stop !
evite le count, il est plus gourmand que le select id seul .
Marsh Posté le 12-12-2001 à 18:13:29
Voilà, je fais un site, mais quand quelqu'un s'inscrit, il ne faut pas qu'il prenne le même pseudo qu'un autre ... comment on vérifie ça en php ???
j'ai pensé à ça, mais ça marche pas ...