Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec 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/11/2010, 03h09   #1
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
Par défaut Problème de requête sql

Bonjour à tous

Je pense que la réponse dois être toute con mais je ne trouve pas la solution

Voici une parti de ma requête :

Code :
1
2
3
4
5
6
SELECT ((YEAR( CURRENT_DATE ) - YEAR( DATENAISSANCE )) - 	(RIGHT( CURRENT_DATE, 5 ) < RIGHT( DATENAISSANCE, 5 ) )	) AS age
FROM PROFIL WHERE age 
BETWEEN 	
(SELECT AGEMINRECH FROM RECHERCHER  WHERE IDPROFIL =1) 
AND
(SELECT AGEMAXRECH FROM RECHERCHER WHERE IDPROFIL 1)
Mon problème est que dans ma clause WHERE il ne reconnais pas la colonne age créer dans le select....

Merci d'avance
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 04h53   #2
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
Bon laissez tomber j'ai trouver plus simple

Par contre j'ai une autre question :

J'ai une requête seulement dans ma condition where j'ai une ligne du genre

Code :
1
2
 
Pe.FUMEUR = (SELECT FUMEURRECH FROM RECHERCHER WHERE IDPROFIL =1)
Je voudrais que si ma sous requete select me renvois un champ vide il saute cette ligne dans ma codition where est ce possible?
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 05h55   #3
Futur Membre du Club
 
johann
Développeur Web
Inscription : octobre 2010
Messages : 21
Détails du profil
Informations personnelles :
Nom : johann
Âge : 25

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2010
Messages : 21
Points : 19
Points : 19
Hello,

Code :
Pe.FUMEUR = (SELECT FUMEURRECH FROM RECHERCHER WHERE IDPROFIL =1)
Je ne suis pas sûr de te suivre. Pourquoi n'utilises tu pas simplement un "IS NOT NULL" pour ne récupérer que les lignes contenants des champs remplis ?

Code :
WHERE tonChamp IS NOT NULL OR tonChamp = ""
boulet_sensei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 06h25   #4
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
en gros j'ai une table profil et une table rechercher et la je veux resortir tous les profil qui correspondent au critere enregistré dans ma table rechercher.

le seul truc c'est que si le champs de la table rechercher est null il ne dois pas prendre en compte la condition where

Je sais pas si je me fais bien comprendre :/
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 09h49   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 930
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 930
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
J'ai l'impression que des jointures pourraient t'aider...
On peut avoir la structure des tables ?
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h14   #6
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
Alors voici les tables que j'utilise dans ma requete

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
CREATE TABLE PROFIL
(
    IDPROFIL              INTEGER               NOT NULL AUTO_INCREMENT,
    PSEUDO                CHAR(50)              NOT NULL,
    IDPERSO               INTEGER                       ,
    IDLOCA                INTEGER               NOT NULL,
    IDPRESENTATION        INTEGER                       ,
    IDDITEPLUS            INTEGER                       ,
    SEXE                  CHAR(6)               NOT NULL,
    DATENAISSANCE         DATE                  NOT NULL,
    LANGUEPARLER          CHAR(100)                      ,
    TAILLE                INTEGER                       ,
    CHEVEUX               CHAR(50)                      ,
    NIVETUDE              CHAR(50)                      ,
    CATPROF               CHAR(50)                      ,
    STATMARITAL           CHAR(50)                      ,
    ETHNIC                CHAR(50)                      ,
    YEUX                  CHAR(50)                      ,
    PROFESSION            CHAR(50)                      ,
    LONGUEURCHEVEUX       CHAR(50)                      ,
    SIGNEPART             CHAR(50)                      ,
    ATTRAY                CHAR(50)                      ,
    PILOSITE              CHAR(50)                      ,
    SILHOUETTE            CHAR(50)                      ,
    PRIMARY KEY (IDPROFIL) 
)ENGINE= InnoDB;
 
 
CREATE TABLE RECHERCHER
(
    IDPROFIL              	INTEGER               NOT NULL,
    PSEUDORECH            	CHAR(50)                      ,
    SEXERECH              	CHAR(50)                      ,
    AGEMINRECH            	INTEGER                       ,
    AGEMAXRECH            	INTEGER                       ,
    TAILLEMINRECH         	INTEGER                       ,
    TAILLEMAXRECH         	INTEGER                       ,
    SILHOURECH            	CHAR(50)                      ,
    ETHNICRECH            	CHAR(50)                      ,
    STATRECH              	CHAR(50)                      ,
    FUMEURRECH            	CHAR(50)                      ,
    DESIRERECH            	CHAR(150)                      ,
    ENVICONCRETIRECH      	CHAR(150)                      ,
    NATRECH               	CHAR(50)                      ,
    PRIMARY KEY (IDPROFIL) 
)ENGINE= InnoDB;
 
 
CREATE TABLE PERSONNALITE
(
    IDPERSO               INTEGER               NOT NULL AUTO_INCREMENT,
    STYLEVIE              CHAR(150)                      ,
    FUMEUR                CHAR(50)                      ,
    LOOK                  CHAR(50)                      ,
    CARACTERE              CHAR(250)                      ,
    LIEUPREF              CHAR(150)                      ,
    VOYAGEREA             CHAR(150)                      ,
    CUISINE               CHAR(150)                      ,
    PLATFAV               CHAR(100)                      ,
    SEXUALITE             CHAR(100)                      ,
    PREFSEX               CHAR(100)                      ,
    SORTI                 CHAR(250)                      ,
    ACTSPORTIVE           CHAR(250)                      ,
    PRIMARY KEY (IDPERSO) 
)ENGINE= InnoDB;
Voici les clès étrangère :

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
 
ALTER TABLE PROFIL
    ADD constraint FOREIGN KEY (PSEUDO)
       REFERENCES CONNEXION (PSEUDO);
 
ALTER TABLE PROFIL
    ADD constraint FOREIGN KEY (IDPERSO)
       REFERENCES PERSONNALITE (IDPERSO);
 
ALTER TABLE PROFIL
    ADD constraint FOREIGN KEY (IDLOCA)
       REFERENCES LOCALISATION (IDLOCA);
 
ALTER TABLE PROFIL
    ADD constraint FOREIGN KEY (IDPRESENTATION)
       REFERENCES PRESENTATION (IDPRESENTATION);
 
ALTER TABLE PROFIL
    ADD constraint FOREIGN KEY (IDDITEPLUS)
       REFERENCES DITEPLUS (IDDITEPLUS);
 
ALTER TABLE RECHERCHER
    ADD constraint FOREIGN KEY (IDPROFIL)
       REFERENCES PROFIL (IDPROFIL);
Et la voici ma requete actuelle :

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
25
 
SELECT P.IDPROFIL, P.PSEUDO
FROM PROFIL AS P 
LEFT OUTER JOIN PERSONNALITE AS Pe ON P.IDPERSO = Pe.IDPERSO 
WHERE
(	
	IF((SELECT PSEUDORECH FROM RECHERCHER WHERE IDPROFIL =1 )='', '1',PSEUDO = (SELECT PSEUDORECH FROM RECHERCHER WHERE IDPROFIL =1 ))
	AND
	P.SEXE = (SELECT SEXERECH FROM RECHERCHER WHERE IDPROFIL =1)
	AND 
	(YEAR( CURRENT_DATE ) - YEAR( P.DATENAISSANCE )) - (RIGHT( CURRENT_DATE, 5 ) < RIGHT( P.DATENAISSANCE, 5 ))
	BETWEEN (SELECT AGEMINRECH FROM RECHERCHER WHERE IDPROFIL =2)AND (SELECT AGEMAXRECH FROM RECHERCHER WHERE IDPROFIL =1)
	AND
	P.TAILLE BETWEEN (SELECT TAILLEMINRECH FROM RECHERCHER WHERE IDPROFIL =2) AND (SELECT TAILLEMAXRECH FROM RECHERCHER WHERE IDPROFIL =1)
	AND
	IF((SELECT SILHOURECH FROM RECHERCHER WHERE IDPROFIL =1)='', '1', P.SILHOUETTE = (SELECT SILHOURECH FROM RECHERCHER WHERE IDPROFIL =1))
	AND
	IF((SELECT ETHNICRECH FROM RECHERCHER WHERE IDPROFIL =1)='', '1', P.ETHNIC = (SELECT ETHNICRECH FROM RECHERCHER WHERE IDPROFIL =1))
	AND
	IF((SELECT STATRECH FROM RECHERCHER WHERE IDPROFIL =1)='', '1', P.STATMARITAL = (SELECT STATRECH FROM RECHERCHER WHERE IDPROFIL =1))
	AND
	IF((SELECT FUMEURRECH FROM RECHERCHER WHERE IDPROFIL =1	)='', '1' ,Pe.FUMEUR = (SELECT FUMEURRECH FROM RECHERCHER WHERE IDPROFIL =1))
	AND
	IF((SELECT NATRECH FROM RECHERCHER WHERE IDPROFIL =1)='', '1', Pe.SEXUALITE = (SELECT NATRECH FROM RECHERCHER WHERE IDPROFIL =1))
)
Ne me parlais meme pas de l'etat du code je sais qu'il est a chier mais avec ce qu'on me demande je vois pas comment faire autrement sans utilisé un language annexe... lol

Ce code fonctionne excepté pour une chose maintenant car
si dans la table profil il n'y a pas d'idPerso, IL ne me renvois aucun ligne...

A savoir que le IDPErso n'est pas obligatoire
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h51   #7
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 528
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 528
Points : 3 519
Points : 3 519
Citation:
Envoyé par waldpest Voir le message
Ce code fonctionne excepté pour une chose maintenant car si dans la table profil il n'y a pas d'idPerso, IL ne me renvois aucun ligne...
A savoir que le IDPErso n'est pas obligatoire
On peut en déduire qu'une personnalité peut ne pas avoir de profil.
Essaye avec un RIGHT JOIN tu auras toutes les personnalité même celles qui n'ont pas de profil.
Ceci dit, vu que tu ne te réfères dans la clause SELECT qu'à des colonnes de la table PROFIL
Citation:
SELECT P.IDPROFIL, P.PSEUDO
, tu risques d'avoir de nombreux NULL NULL dans la liste.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 13h08   #8
Invité de passage
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 1
Points : 1
J'ai essayer toute les versions de JOIN qui existe rien n'y fait
waldpest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 14h31   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 930
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 930
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Difficile à comprendre ton truc !

Ton besoin :
Citation:
je veux ressortir tous les profils qui correspondent au critère enregistré dans ma table rechercher.
Ça risque de ne pas être performant si tu as beaucoup de données mais tu peux essayer un truc de ce genre, si j'ai bien compris le sens de ta requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT p.IDPROFIL, p.PDEUDO
FROM RECHERCHER AS r
LEFT OUTER JOIN PROFIL AS p 
    ON p.PSEUDO = r.PSEUDORECH
    OR p.SEXE = r.SEXERECH
    OR p.DATENAISSANCE BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL r.AGEMAXRECH YEAR) AND DATE_SUB(CURRENT_DATE, INTERVAL r.AGEMINRECH YEAR)
    OR p.TAILLE BETWEEN r.TAILLEMINRECH AND r.TAILLEMAXRECH
    OR p.SILHOUETTE = r.SILHOURECH
    OR p.STATMARITAL = r.STATRECH
 
    LEFT OUTER JOIN PERSONNALITE AS pe ON pe.IDPERSO = p.IDPERSO
 
WHERE r.IDPROFIL = 1
    AND
    (
        pe.IDPERSO IS NULL
        OR pe.FUMEUR = r.FUMEURRECH
        OR pe.SEXUALITE = r.NATRECH
    )
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h31.


 
 
 
 
Partenaires

Hébergement Web