begin process at 2012 05 28 20:51:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Clause WHERE LIKE


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Clause WHERE LIKE

jeudi 25 février 2010 à 15:37:58 | Clause WHERE LIKE

cdie

Bonjour,
J'essaye activement de faire fonctionner un clause LIKE pour récuperer un nombre de ligne avec le code suivant :
Code PHP :
		
$tab = explode("/",date("d/m/Y",time()));
$mois = $tab[1];
$an=$tab[2];
$filtre = "$mois/$an";
$data=mysql_query("SELECT * FROM tachat WHERE pseudo = '$_SESSION[pseudo]' AND date LIKE '%$filtre%'") or die(mysql_error());
$nombre = mysql_fetch_row($data);

mais malheureusement $nombre ne contient rien ...
Quelqu'un peut-il m'éclairer ?

Merci d'avance


 
jeudi 25 février 2010 à 19:57:18 | Re : Clause WHERE LIKE

kohntark

Membre Club
Salut,


Quel est le type de champ de date ?

Attention a ne pas utiliser de mots réservés comme date !!
Tu devrais renommer ce champ, ou alors mets le entre `

Pourquoi passer par PHP pour les dates alors que tu peux le faire dans la requête SQL ?
Code :
SELECT * FROM tachat WHERE MONTH(date_renommee) LIKE MONTH(NOW());


Cordialement,

Kohntark -

jeudi 25 février 2010 à 20:20:00 | Re : Clause WHERE LIKE

cdie

Salut à toi,
C'est vrai que j'ai pas pensé à mon nom de colonnes, je le change.
Aussi, j'ignorais que ça marchait comme ça en SQL. Merci pour cet eclaircissement. Y a-t-il un moyen d'avoir l'année avec ?



 
vendredi 26 février 2010 à 01:40:05 | Re : Clause WHERE LIKE

gibozsec

Bonjour,

Puisque tu en es à l'optimisation, tu peux aussi enlever le "or die()" et mettre en place une vraie gestion d'erreur. Le die(mysql_error()); c'est non seulement moche mais en plus c'est une faille de sécurité (des infos sur ton serveur et ta db pourraient bien s'afficher à l'écran).

Pour l'année, il y a tout bêtement une fonction YEAR() en MySql (et DAY() pour le jour si ça t'intéresse).

Pour ton script plus haut, le problème venait probablement du fait que tu met le mois avant l'année et que tu utilise le slash comme séparateur. En mettant $an.'-'.$mois tu devrais mieux t'en sortir. Tu peux aussi te passer du 1er '%' dans le filtre puisqu'il ne peut rien y avoir avant.

Pour finir, je te conseil d'utiliser php plutôt que MySql, une requête ou il n'y a pas d'appel à des fonctions est forcement plus rapide qu'une ou il y a des fonction. En plus, l'utilisation de NOW() empêche l'utilisation de la cache MySql.


Grrrrrrrrrrr
vendredi 26 février 2010 à 08:18:29 | Re : Clause WHERE LIKE

cdie

Salut,
Le die(mysql_error()) me sert surtout à moi, pour débugguer. Je l'enlève généralement de mes pages une fois que le débuggage est fait.

Aussi, merci de ta réponse au sujet des fonctions mysql.
Je stocke la date dans ma BDD sous la forme d'un varchar et la date d'hier était stockée comme 25/02/2010. L'explode me semblait donc justifié. Mais malheureusement, il n'arrive pas sélectionner les lignes de date du mois encours de cette année ...

Merci quand même pour ta réponse :)


 
samedi 27 février 2010 à 09:50:05 | Re : Clause WHERE LIKE

kohntark

Membre Club
@Cdie :
Stocker une date dans un VARCHAR est à mon sens une grosse erreur, il y a le type date pour cela.
Tu gagneras un temps précieux à l'utiliser. La requête que je te proposais ne fonctionnera pas avec un VARCHAR (désolé d'avoir oublié l'année, Gibozsec a apporté l'info)

@gibozsec :

Pour finir, je te conseil d'utiliser php plutôt que MySql, une requête ou il n'y a pas d'appel à des fonctions est forcement plus rapide qu'une ou il y a des fonction. En plus, l'utilisation de NOW() empêche l'utilisation de la cache MySql.


=> pour le coup certainement, encore que ça ne soit pas gagné, surtout avec l'utilisation de 3 fonctions PHP + l'assignation aux variables.
De toute façon ça doit être négligeable et il reste difficile de se faire une idée là dessus sans connaitre le contexte (structure de la DB, taille de la table, fréquence des appels, etc ...)

Autre point sur lequel j'ai un gros doute, c'est la mise en cache d'une requête sur une date avec un joker.
Il me semble, mais je n'en suis pas certain, que le moteur mySQL mettra en cache un "LIKE '2010-02-27'" mais pas un "LIKE '2010-02-%'" ... à tester.

Bref, je préfère intégrer le traitement en SQL, je trouve cela plus "propre", mais c'est une question de goût.

Selon moi l'optimisation n'est pas qu'une question de rapidité d'exécution, mais également de lisibilité du code, de réutilisation, etc ... etc ... quitte à perdre qq centièmes.

Si l'on voulait réellement optimiser :
$tab = explode("/",date("d/m/Y",time()));
$mois = $tab[1];
$an=$tab[2];
$filtre = "$mois/$an";

$data=mysql_query("SELECT * FROM tachat WHERE pseudo = '$_SESSION[pseudo]' AND date LIKE '%$filtre%'") or die(mysql_error());
$nombre = mysql_fetch_row($data);

en bleu :
c'est totalement inutile de procéder ainsi, autant mettre un date('Y') et un date('m') directement dans la requête et supprimer ces lignes.

en orange :
les fonctions mysql_* sont dépassées, mieux vaut utiliser PDO ou mysqli.

en rouge :
Ne vaut il pas mieux sélectionner les champs dont tu as réellement besoin ? (c'est peut être déjà le cas ?)

+ ce qui a déjà été dit concernant le premier % et le die.

Par ailleurs le nom de ta variable $nombre laisse penser à d'autres pbs.
Que souhaites tu faire au juste ?


Cordialement,

Kohntark -



Cette discussion est classée dans : nombre, code, like, clause, where


Répondre à ce message

Sujets en rapport avec ce message

probléme nom de colonne clause where [ par tif27940 ] Bonjour, voici ma requête [code=php] "SELECT * FROM personnes WHERE nom-jeune-fille LIKE '$texteR%' ORDER by nom, pnom ASC limit $limitemin,10 compter le nombre de visiteurs [ par esteller ] Bonjour à tous. je n'arrive pas à compter le nombre total de visiteurs de mon site. voici le code de ma page connectes.php: [code=php] <?php $retour probleme avec mon script php update [ par jbtv ] Bonjour a tous ! voici mon probleme ###################################### [code=php] le lien es modifier la taille de ma photo [ par esteller ] j'ai un code permettant d'afficher les éléments de ma base de donnée dans une table.Mais le probleme est qu'il affiche la photo tres grande.comment fa erreur du code [ par esteller ] bonjour à tous j'ai un formulaire permettant de faire une recherche par le nom.quand je clique sur rechercher il m'affiche le nombre d'enregistrements Ligne de code qui devrait recuperer des donnees... [ par geof2810 ] [code=php]$req = mysql_query('SELECT * FROM videogame WHERE init="' . $game . '" AND ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nom Condiiton et couleur [ par Sinsitrus ] Salut ! Pouvez-vous me dire comment colorier en rouge le nombre négatif et en vert le nombre positif de ce résultat svp ? [code=php][/ dénombrer le nombre de personne dans un menage [ par msi079 ] salut . on me demande de dénombrer le nombre de personne dans les ménage de la base de donnée mysql. j'arrive a afficher les information sur le chef d Compter un nombre de lignes en php [ par amine124 ] Bonjour, j'ai 4 tableaux essentiels dans ma bdd suivant le MLD: -> [b]classe[/b]([u]code_classe[/u], .....) -> [b]eleve[/b] ([u]code_elv[/u], #code Faire un where avec 2 champs [ par destiny ] Bonjour, [u]Voila ce que j'aimerai faire : [/u] [code=autre]SELECT _ID, ville, code_postal FROM `codes_postal` WHERE ville+"-"+code_postal="avrillé-


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales