Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2010, 16h08   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 14
Points : 14
Par défaut Affichage date de naissance

Bonjour à tous,

J'aimerais faire une requête pour afficher la date de naissance de tous mes membres. J'y arrive sans problème, mais je coince. J'aimerais afficher à partir d'aujourd'hui => 31 décembre => 01 janvier => 31 décembre.
J'ai fouillé dans le forum et ai trouvé cette requête :

Code :
1
2
3
4
5
6
$sql = "
select pseudo, date_naissance 
from membres 
WHERE ((DAYOFYEAR(date_naissance) - DAYOFYEAR(CURDATE()) ) BETWEEN 0 AND 365)
OR ((DAYOFYEAR(date_naissance) +365 - DAYOFYEAR(CURDATE()) ) BETWEEN 0 AND 365) 
order by MONTH(date_naissance), DAY(date_naissance), pseudo limit $start, 20";
Mon order n'est pas bon, et ne trouve pas la solution :s

Quelqu'un voit comment faire ?
Merci de votre aide.
kriekbellevue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 16h24   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
Je ne comprends pas du tout ce que tu veux faire !

Citation:
J'aimerais faire une requête pour afficher la date de naissance de tous mes membres.
Avec le début de la requête, tu l'as :
Code :
1
2
SELECT pseudo, date_naissance
FROM membres
Citation:
J'aimerais afficher à partir d'aujourd'hui => 31 décembre => 01 janvier => 31 décembre.
Euh... c'est quoi la logique de cette suite ?

Et je ne comprends pas non plus ce que tu cherches à faire avec ton WHERE :
Code :
1
2
3
WHERE ((DAYOFYEAR(date_naissance) - DAYOFYEAR(CURDATE()) ) BETWEEN 0 AND 365)
OR ((DAYOFYEAR(date_naissance) +365 - DAYOFYEAR(CURDATE()) ) BETWEEN 0 AND 365) 
ORDER BY MONTH(date_naissance), DAY(date_naissance), pseudo
Alors lis la phrase en bleu de ma signature et appliques-en le principe puis donne un petit jeu de données et le résultat attendu, ça aidera à la compréhension.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 16h37   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 14
Points : 14
Désolé. Comme souvent quand on est dans un script. On crois que l'on est clair mais non...

Je voudrais simplement afficher comme ceci :
  • membre1 : 14 décembre 19**
  • membre2 : 16 décembre 19**
  • membre3 : 29 décembre 19**
  • membre4 : 03 janvier 19**
  • membre5 : 07 janvier 19**
Commencer ma liste à partir d’aujourd’hui. Pas dur. Mais qu'elle ne s'arrête pas au 31 décembre.
Lister mes membres (date de naissance) sur un an, mais en commençant aujourd'hui.

Pour le code, j'en ai essayé pas mal. Je ne sais pas pourquoi j'ai mis celui-là... Faut l'oublier.

Est-ce possible en SQL, ou dois-je passer par un script? Je travaille en PHP.
kriekbellevue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 17h32   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
C'est effectivement faisable en jouant avec les fonction de dates de MySQL mais pas le temps d'y réfléchir en détail maintenant.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 11h50   #5
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 14
Points : 14
Je ne sais pas si j'ai contourné le problème, mais j'ai scindé ma requête en deux.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
global $wpdb;
$start = ($page - 1) * 20;
$sql = "select pseudo, date_naissance from phpl_membres 
where date_naissance != '0000-00-00' 
AND (
(MONTH(date_naissance) = '" . date("m") . "' AND DAY(date_naissance) >= '" . date("d") . "') 
OR (MONTH(date_naissance) > '" . date("m") . "')  
)
order by MONTH(date_naissance), DAY(date_naissance), pseudo limit $start, 20";	
$count = $wpdb->get_count($sql);
$var[1] = $wpdb->get_results($sql);
IF($count < 20)
{
	$c = 20 - $count;
	$sql = "select pseudo, date_naissance from phpl_membres 
		where date_naissance != '0000-00-00' 
		AND (
		(MONTH(date_naissance) < '" . date("m") . "') 
		OR (MONTH(date_naissance) = '" . date("m") . "' AND DAY(date_naissance) < '" . date("d") . "') 
		)
		order by MONTH(date_naissance), DAY(date_naissance), pseudo limit $start, $c";
$var[2] = $wpdb->get_results($sql);
}
$var = array_merge($var[1], $var[2]);
Pour le mois de décembre, ça marche.
kriekbellevue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h15   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
J'étais parti dans un truc compliqué hier avant de renoncer et de t'envoyer mon précédent message.
Essaie ceci qui est assez simple :
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT pseudo, 
    DATE_FORMAT(date_naissance, '%m-%d') AS anniversaire
FROM membres
WHERE date_naissance <> '0000-00-00'
ORDER BY 
    CASE
        WHEN DATE_FORMAT(date_naissance, '%m-%d') >= DATE_FORMAT(CURRENT_DATE, '%m-%d') THEN 0
        ELSE 1
    END,
    DATE_FORMAT(date_naissance, '%m-%d'),
    pseudo
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 16h00   #7
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 50
Points : 14
Points : 14
Héhé. Me semblait bien que l'on pouvait faire quelque chose dans le order. Il va falloir que je fouille dans mes cours, je ne me rappelle pas du case dedans.

Un grand merci. Ta solution est beaucoup plus simple, claire que la mienne.
kriekbellevue est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h44.


 
 
 
 
Partenaires

Hébergement Web