Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 18/02/2011, 04h16   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 6
Points : 6
Par défaut Besoin d'aide pour une requete

Bonjour,
Je debute un peu en SQL et j'ai du mal avec une requete :

J'ai 2 tables : contrat et renouv
la table contrat contient :
num_contrat
type_contrat
jour_contrat
mois_contrat

la table renouv contient:
num_renouv
num_contrat
date_debut
date fin

Je voudrais selectionner les contrats qui n'ont pas de renouv apres une date donnée.

jour_contrat est le jour du renouvellement a faire et mois_contrat est le mois du renouvellement

par exemple je veux selectionner tous les contrats de type "automatique" dont le periode de renouvellement est entre le 12-02-2011 et le 11-03-2011 qui n'ont pas deja été renouvelé.

En d'autre terme je veux selectionner les contrats a renouveler sans selectionner ceux qui sont deja renouveler.
Merci d'avance pour votre aide !
kwyzix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 05h44   #2
Invité régulier
 
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 6
Points : 6
Re !

Je crois que j'ai trouvé finalement ! enfin, je pense !! corrigez moi si j'me trompe !
Voila la requete SQL dans du php :

Code :
1
2
3
4
mysql_query("SELECT *,c.num_contrat as cnum_contrat
FROM contrat c
LEFT OUTER JOIN renouv r ON r.num_contrat=c.num_contrat AND r.date_fin>CONCAT(".date('Y',strtotime('2011-02-12')).",'-',c.mois_contrat,'-',c.jour_contrat)
WHERE CONCAT(c.mois_contrat,c.jour_contrat)>=".intval(date('md',strtotime('2011-02-12')))." and CONCAT(cc.mois_contrat,c.jour_contrat)<=".intval(date('md',strtotime(('2011-03-11')))."))");
kwyzix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 10h12   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
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 993
Points : 18 243
Points : 18 243
Envoyer un message via MSN à CinePhil
Comme tu mets SELECT *, la colonne c.num_contrat est déjà présente ; inutile de la répéter. Mais en réalité, il vaut mieux éviter la guerre des étoiles !

Citation:
je veux selectionner tous les contrats de type "automatique" dont le periode de renouvellement est entre le 12-02-2011 et le 11-03-2011 qui n'ont pas deja été renouvelé.
Dans ta requête, tu n'as pas de condition de restriction sur le type de contrat !

Essaie cette requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT les_colonnes_necessaires_et_pas_etoile,
    c.num_contrat AS cnum_contrat
FROM contrat c
LEFT OUTER JOIN renouv r 
    ON r.num_contrat = c.num_contrat 
WHERE c.type_contrat = 'automatique'
    AND STR_TO_DATE(CONCAT('2011-', c.mois_contrat,  '-', c.jour_contrat), '%Y-%m-%d') BETWEEN '2011-02-12' AND '2011-03-11' 
    AND
    (
        r.num_contrat IS NULL
        OR 
        (
            r.date_debut NOT BETWEEN '2011-02-12' AND '2011-03-11'
            AND r.date_fin NOT BETWEEN '2011-02-12' AND '2011-03-11'
        )
    )
__________________
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 10
Vieux 18/02/2011, 21h51   #4
Invité régulier
 
Inscription : janvier 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 16
Points : 6
Points : 6
Pas mal la syntaxe de ta requete ! bcp plus classe que la mienne !!
Ca marche niquel !! merci bcp CinePhil !
kwyzix 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 12h30.


 
 
 
 
Partenaires

Hébergement Web