Requete SQL, année en cours
Résolu
doudoupe
Messages postés
85
Date d'inscription
Statut
Membre
Dernière intervention
-
doudoupe Messages postés 85 Date d'inscription Statut Membre Dernière intervention -
doudoupe Messages postés 85 Date d'inscription Statut Membre Dernière intervention -
Bonjour tout le monde!
Petite question concernant les dates en SQL.
J'ai une base de donnée contenant une table 'users' avec un champs (parmi d'autres) reg_date (=registration date). Certains users se sont inscrit en 2009 (par ex) et d'autres en 2010, cette année.
J'ai un script php qui se connecte à ma base de donnée via PDO et une requete SQL (parmi d'autres) qui doit compter le nombre de users s'étant inscrits cette année (l'année en cours) et ne pas prendre en compte les users inscrits les autres années.
Attention: Si l'année en cours est 2011, je souhaite compter le nombre de users inscrits en 2011 (logique).
J'ai donc penser à ça:
nb: dans la bdd, les date sont de format Y-m-d
Forcement, ça aurait été trop facile! :D
Le résultat m'affiche le nombre de users quelque soit l'année (comme si je n'avais pas mis de condition WHERE)
Avez-vous une solution ?
Merci pour vos réponses!
doudoupe
edit: clarification! :)
Petite question concernant les dates en SQL.
J'ai une base de donnée contenant une table 'users' avec un champs (parmi d'autres) reg_date (=registration date). Certains users se sont inscrit en 2009 (par ex) et d'autres en 2010, cette année.
J'ai un script php qui se connecte à ma base de donnée via PDO et une requete SQL (parmi d'autres) qui doit compter le nombre de users s'étant inscrits cette année (l'année en cours) et ne pas prendre en compte les users inscrits les autres années.
Attention: Si l'année en cours est 2011, je souhaite compter le nombre de users inscrits en 2011 (logique).
J'ai donc penser à ça:
$currentY = date("Y-01-01"); $data_nbUserYear = $bdd->query('SELECT COUNT(*) FROM users WHERE reg_date>'.$currentY.';'); $nbUserYear = $data_nbUserYear->fetch();
nb: dans la bdd, les date sont de format Y-m-d
Forcement, ça aurait été trop facile! :D
Le résultat m'affiche le nombre de users quelque soit l'année (comme si je n'avais pas mis de condition WHERE)
Avez-vous une solution ?
Merci pour vos réponses!
doudoupe
edit: clarification! :)
A voir également:
- Sql année en cours
- Panne tnt en cours aujourd'hui - Guide
- En cours de livraison ✓ - Forum Consommation & Internet
- En cours d'acheminement - Forum Consommation & Internet
- Il est en cours de transport vers votre site de livraison - Forum Consommation & Internet
- La ressource demandée est en cours d'utilisation ✓ - Forum Caméra
5 réponses
tu as beaucoup de méthodes possibles ^^
1) une table par années : tu regarde l'année, tu regarde si la table correspondante existe, sinon tu la crée
2) une table globale : tu regarde l'année, tu compte le visiteur dans la ligne où l'année est celle qu'il faut
un dessin :
| ID | année | visiteurs |
| 1 | 2010 | 150 |
| 2 | 2011 | 123 |
| 3 | 2012 | 145 |
aprés ça sert à rien, c'est la fin du monde XD
pour te simplifier la vie, tu peux créer directement plusieurs années de suite ;)
ce sont les deux qui me viennent tout de suite à l'esprit, mais il y en a d'autre ;)
1) une table par années : tu regarde l'année, tu regarde si la table correspondante existe, sinon tu la crée
2) une table globale : tu regarde l'année, tu compte le visiteur dans la ligne où l'année est celle qu'il faut
un dessin :
| ID | année | visiteurs |
| 1 | 2010 | 150 |
| 2 | 2011 | 123 |
| 3 | 2012 | 145 |
aprés ça sert à rien, c'est la fin du monde XD
pour te simplifier la vie, tu peux créer directement plusieurs années de suite ;)
ce sont les deux qui me viennent tout de suite à l'esprit, mais il y en a d'autre ;)
Avant tout, merci de te pencher sur mon post! :)
Je ne peux pas me permettre de créer de table en plus. La BDD étant déja conséquente.
Je cherche simplement à parcourir ma table 'user' existante, si l'année d'inscription est la meme que l'année en cours alors je le prend en compte, sinon je passe à l'entrée (user) suivante.
Je peux certainement faire cela simplement avec un WHERE comme dans mon bout de code, sans avoir à créer une table en plus... Je trouve que ça alourdi la base pour très peu, non?
Il s'agit juste de faire des statistiques concernant mes users. L'affichage du résultat de la requête est géré ensuite par du php.
Je ne peux pas me permettre de créer de table en plus. La BDD étant déja conséquente.
Je cherche simplement à parcourir ma table 'user' existante, si l'année d'inscription est la meme que l'année en cours alors je le prend en compte, sinon je passe à l'entrée (user) suivante.
Je peux certainement faire cela simplement avec un WHERE comme dans mon bout de code, sans avoir à créer une table en plus... Je trouve que ça alourdi la base pour très peu, non?
Il s'agit juste de faire des statistiques concernant mes users. L'affichage du résultat de la requête est géré ensuite par du php.
$req = "SELECT * FROM inscrits WHERE année=2010";
$nbr = exec($req);
$tot = sizeof($nbr);
ça devrais marcher :)
$nbr = exec($req);
$tot = sizeof($nbr);
ça devrais marcher :)
Alors oui ça pourrait marcher si j'avais un champs 'année' en plus du champs 'reg_date', chose que je souhaite éviter.
De plus, cette méthode semble encore un peu lourde (selection de tous les champs puis les compter avec sizeof()). ^^ (désolé je suis chiant!)
Bref, toujours est-il que tu m'as donné un début de solution! ;)
Ce qui m'a conduit à une recherche fructueuse, puisque j'ai trouvé ce que je cherchais!
Voici donc la solution qui je pense est la bonne, et la plus légère.
De plus, cette méthode semble encore un peu lourde (selection de tous les champs puis les compter avec sizeof()). ^^ (désolé je suis chiant!)
Bref, toujours est-il que tu m'as donné un début de solution! ;)
Ce qui m'a conduit à une recherche fructueuse, puisque j'ai trouvé ce que je cherchais!
Voici donc la solution qui je pense est la bonne, et la plus légère.
$currentY = date('Y'); $data_nbUserYear = $bdd->query('SELECT COUNT(*) FROM users WHERE year(reg_date) = '.$currentY.';'); $nbUserYear = $data_nbUserYear->fetch();
je ne pense pas pouvoir t'aider plus compte tenu de mon niveau ^^
moi je pense mes site entièrement dés le début, puis le jour ou je me rend compte que j'ai oublié un truc, je bricole ^^ si ça marche tant mieux, sinon, je pleure XD
je suis loin du "c'est peut être un peu lourd" :P
d'ailleur, je ne comprend pas bien, au final, tu n'éxecute le script qu'une fois si c'est pour compter le nombre d'inscriptions à l'année...
moi je pense mes site entièrement dés le début, puis le jour ou je me rend compte que j'ai oublié un truc, je bricole ^^ si ça marche tant mieux, sinon, je pleure XD
je suis loin du "c'est peut être un peu lourd" :P
d'ailleur, je ne comprend pas bien, au final, tu n'éxecute le script qu'une fois si c'est pour compter le nombre d'inscriptions à l'année...
J'explique rapidement:
Je crée une page d'administration de ma bdd en php, cad ajout de donnée, lecture de données et statistiques.
Par exemple j'ai un petit cadre sur la page d'accueil qui affiche entre autre le nombre total d'utilisateurs enregistrés, le nombre d'utilisateur enregistré depuis le debut de l'année... Et donc ce petit script est exécuter à chaque fois qu'on va sur la page d'admin.
Comme un utilisateur peut-être créer (et supprimé) n'importe quand, cette valeur changera souvent. Qu'on soit le 15 Janvier 2010, ou le 15 decembre 2010, je souhaite afficher le nombre d'utilisateurs crées depuis le 1er janvier 2010.
Ce n'est que pour avoir des statistiques que je souhaite faire ça. :)
Je crée une page d'administration de ma bdd en php, cad ajout de donnée, lecture de données et statistiques.
Par exemple j'ai un petit cadre sur la page d'accueil qui affiche entre autre le nombre total d'utilisateurs enregistrés, le nombre d'utilisateur enregistré depuis le debut de l'année... Et donc ce petit script est exécuter à chaque fois qu'on va sur la page d'admin.
Comme un utilisateur peut-être créer (et supprimé) n'importe quand, cette valeur changera souvent. Qu'on soit le 15 Janvier 2010, ou le 15 decembre 2010, je souhaite afficher le nombre d'utilisateurs crées depuis le 1er janvier 2010.
Ce n'est que pour avoir des statistiques que je souhaite faire ça. :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
currentY = date('Y');
$data_nbUserYear = $bdd->query('SELECT * FROM users WHERE year(reg_date) = '.$currentY.';');
$nbUserYear = sizeof($data_nbUserYear);
ça marche pas ça ? au final, c'est aussi lourd que le tien...
$data_nbUserYear = $bdd->query('SELECT * FROM users WHERE year(reg_date) = '.$currentY.';');
$nbUserYear = sizeof($data_nbUserYear);
ça marche pas ça ? au final, c'est aussi lourd que le tien...
Si ça devrait fonctionner aussi ça.
Mais ton SELECT * sélectionne TOUS les champs (une 15aine pour ma part) de la table users (où l'année correspond) et les stocke en mémoire, puis stocke INT.
En utilisant SELECT COUNT(*) tu ne stockes qu'on INT en mémoire.
Dans une base avec plusieurs centaines de nouveaux users par an, ça me semble bien plut léger! Tu ne crois pas?
Mais ton SELECT * sélectionne TOUS les champs (une 15aine pour ma part) de la table users (où l'année correspond) et les stocke en mémoire, puis stocke INT.
En utilisant SELECT COUNT(*) tu ne stockes qu'on INT en mémoire.
Dans une base avec plusieurs centaines de nouveaux users par an, ça me semble bien plut léger! Tu ne crois pas?
bon... ben si tu en as une toute petite (de mémoire hein, je ne sais pas ce que tu vas pensser là... :P)
$currentY = date('Y');
$req = "SELECT COUNT(*) FROM table";
$tot = exec($req);
$temp = 0;
$nbr = 0;
while( $temp < $tot)
{
$req = "SELECT year(reg_date) FROM users WHERE ID = $temp ;";
$temp = $temp + 1;
$xtmp = exec($req);
if($xtmp = $currentY);
{
$nbr = $nbr + 1;
}
}
echo $nbr;
ça, ça a toutes les chances de marché si je me suis pas trompé sans la syntaxe...
le seul problème c'est la boucle...
mais au moins, t'utilise trés peu de mémoire
$currentY = date('Y');
$req = "SELECT COUNT(*) FROM table";
$tot = exec($req);
$temp = 0;
$nbr = 0;
while( $temp < $tot)
{
$req = "SELECT year(reg_date) FROM users WHERE ID = $temp ;";
$temp = $temp + 1;
$xtmp = exec($req);
if($xtmp = $currentY);
{
$nbr = $nbr + 1;
}
}
echo $nbr;
ça, ça a toutes les chances de marché si je me suis pas trompé sans la syntaxe...
le seul problème c'est la boucle...
mais au moins, t'utilise trés peu de mémoire