IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

requete trop complexe


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut requete trop complexe
    Bonjour,
    Je fais des extractions de données de ma base ACCESS via une interface en php et odbc.

    L'utilisateur doit selectionner des criteres pour la selection et c'est en fonction des criteres choisis (il y a plusieurs combonaisons) que je fais les requetes. Il y a 11 criteres au choix et on peut en choisir de 1 à 11. Je n'en suis qu'aux requetes où l'utilisateur a selectionner 2 criteres que j'ai déja des requetes trop complexes.

    Ici par exemple j'ai une requete dont les criteres sont nutrition et pathologie.
    j'ai les relations

    Partie (IdPartie, nomPartie, sousPartie, #numDossier)
    Question (IdQuestion, libelle, valeur, #IdPartie)
    Questionnaire (numDossier..........)
    Patient (IdPatient, nomP.........)

    Nutrition et pathologie sont des nomPartie. Pour chacun il y a plusieurs sousPartie. Je récupere alors les libellés, ou les valeurs en fonctions des sousPartie.
    Pour nutrition j'en ai 5 comme ça et 10 pour pathologie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT pa.numDossier, qu.valeur as poids
    FROM Partie pa 
    INNER JOIN Question qu 
    ON pa.IdPartie=qu.IdPartie
    WHERE pa.nomPartie='nutrition' AND pa.sousPartie is NULL 
    AND qu.libelle='poids' order by pa.numDossier
    Puis je fais plusieurs jointures pour réunir tout ça
    puis une derniere jointure avec le patient et son dossier. Ce qui donne en tout la requête très longue et complexe suivante et qui me renvoie un message d'erreur :

    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] La requête est trop complexe., SQL state S1000 in SQLExecDirect in C:\Serveur\Interface\InterfacePROLOG\requete2.php5 on line 4211



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
     
    $NutriPatho="SELECT obli.numDossier, obli.localisationPrim,
    		obli.nomP, obli.prenomP, obli.dateN, obli.sexe, obli.rue, obli.codeP, 
    		obli.ville, obli.numDossierInstitution, obli.institution, obli.service, 
    		NutriPatho.poids, NutriPatho.taille, NutriPatho.BMI, NutriPatho.MNA, 
    		NutriPatho.PerteKg, NutriPatho.cardiaque, NutriPatho.coronaire, 
    		NutriPatho.rythme, NutriPatho.respiratoire, NutriPatho.diabete, 
    		NutriPatho.osteo, NutriPatho.dysthyroidie, NutriPatho.neurologie, 
    		NutriPatho.thrombo, NutriPatho.hta
    		FROM
    			(SELECT q.numDossier, q.localisationPrim, p.nomP,
    			p.prenomP, p.dateN, p.sexe, p.rue, p.codeP, p.ville, 
    			e.numDossierInstitution,eq.institution, eq.service 
    			FROM questionnaire q, patient p, cancer c, envoi e, equipe eq
    			WHERE p.IdPatient=q.IdPatient 			and q.localisationPrim=c.localisationPrim and p.IdPatient=e.IdPatient 
    			and e.IdEq=eq.IdEq) obli
    		INNER JOIN				
    			(SELECT Nu.numDossier, Nu.poids, Nu.taille, Nu.BMI, Nu.MNA,
    				Nu.PerteKg, patho.cardiaque, patho.coronaire, 
    				patho.rythme, patho.respiratoire, patho.diabete, patho.osteo, 
    				patho.dysthyroidie, patho.neurologie, patho.thrombo, patho.hta
    			FROM 	
    				(SELECT n2.numDossier, n1.poids, n1.taille, n1.BMI, n1.MNA, 
    				n2.PerteKg
    				FROM
    					(SELECT nutri1.numDossier, nutri1.poids, nutri1.taille,
    					nutri2.BMI, nutri2.MNA
    					FROM
    						(SELECT P.numDossier, P.poids, T.taille
    						FROM
    							(SELECT pa.numDossier, qu.valeur as poids
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='nutrition' AND pa.sousPartie is NULL 
    							AND qu.libelle='poids' order by pa.numDossier) P
    						INNER JOIN
    							(SELECT pa.numDossier, qu.valeur as taille
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='nutrition' AND pa.sousPartie is NULL 
    							AND qu.libelle='taille' order by pa.numDossier) T
    						ON P.numDossier=T.numDossier
    						ORDER BY P.numDossier) nutri1
    					INNER JOIN
    						(SELECT B.numDossier, B.BMI, M.MNA
    						FROM
    							(SELECT pa.numDossier, qu.valeur as BMI
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='nutrition' AND pa.sousPartie is NULL 
    							AND qu.libelle='BMI' order by pa.numDossier) B
    						INNER JOIN
    							(SELECT pa.numDossier, qu.valeur as MNA
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='nutrition' AND pa.sousPartie is NULL 
    							AND qu.libelle='MNA' order by pa.numDossier) M
    						ON B.numDossier=M.numDossier
    						ORDER BY B.numDossier) nutri2
    					ON nutri1.numDossier=nutri2.numDossier
    					ORDER BY nutri1.numDossier) n1
    				INNER JOIN			
    					(SELECT pa.numDossier, qu.libelle as PerteKg
    					FROM question qu 
    					INNER JOIN partie pa 
    					ON qu.IdPartie=pa.IdPartie
    					WHERE pa.nomPartie='nutrition' 
    					and qu.libelle in ('oui', 'non', 'ne sait pas') 
    					and qu.valeur='1' order by pa.numDossier) n2
    				ON n1.numDossier=n2.numDossier
    				ORDER BY n1.numDossier) Nu
    			INNER JOIN				
    				(SELECT patho1.numDossier, patho1.cardiaque, patho1.coronaire, 
    				patho1.rythme, patho1.respiratoire, patho1.diabete, patho2.osteo, 
    				patho2.dysthyroidie, patho2.neurologie, patho2.thrombo, patho2.hta
    				FROM	
    					(SELECT P1.numDossier, P1.cardiaque, P1.coronaire, P2.rythme,
    					P2.respiratoire, P2.diabete
    					FROM
    						(SELECT card.numDossier, card.cardiaque, coro.coronaire
    						FROM
    							(SELECT pa.numDossier, qu.libelle as cardiaque
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='pathologie' 
    							AND pa.sousPartie='cardiaque' 
    							AND qu.valeur='1' order by pa.numDossier) card
    						INNER JOIN	
    							(SELECT pa.numDossier, qu.libelle as coronaire
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='pathologie' 
    							AND pa.sousPartie='coronaire' 
    							AND qu.valeur='1' order by pa.numDossier) coro
    						ON card.numDossier=coro.numDossier) P1
    					INNER JOIN	
    						(SELECT rythme.numDossier, rythme.rythme, P.respiratoire, 
    						P.diabete
    						FROM
    							(SELECT pa.numDossier, qu.libelle as rythme
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='pathologie' AND pa.sousPartie='rythme' 
    							AND qu.valeur='1' order by pa.numDossier) rythme
    						INNER JOIN
    							(SELECT respi.numDossier, respi.respiratoire, 
    							diabete.diabete
    							FROM			
    								(SELECT pa.numDossier, qu.libelle as respiratoire
    								FROM Partie pa INNER JOIN Question qu 
    								ON pa.IdPartie=qu.IdPartie
    								WHERE pa.nomPartie='pathologie' 
    								AND pa.sousPartie='respiratoire' 
    								AND qu.valeur='1' order by pa.numDossier) respi
    							INNER JOIN	
    								(SELECT pa.numDossier, qu.libelle as diabete
    								FROM Partie pa INNER JOIN Question qu 
    								ON pa.IdPartie=qu.IdPartie
    								WHERE pa.nomPartie='pathologie' 
    								AND pa.sousPartie='diabete' 
    								AND qu.valeur='1' order by pa.numDossier) diabete
    							ON respi.numDossier=diabete.numDossier) P
    						ON rythme.numDossier=P.numDossier) P2
    					ON P1.numDossier=P2.numDossier) patho1
    				INNER JOIN
    					(SELECT P3.numDossier, P3.osteo, P3.dysthyroidie, 
    					P4.neurologie, 
    					P4.thrombo, P4.hta
    					FROM
    						(SELECT osteo.numDossier, osteo.osteo, dysthy.dysthyroidie
    						FROM
    							(SELECT pa.numDossier, qu.libelle as osteo
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='pathologie' 
    							AND pa.sousPartie='osteo-articulaire' 
    							AND qu.valeur='1' order by pa.numDossier) osteo
    						INNER JOIN	
    							(SELECT pa.numDossier, qu.libelle as dysthyroidie
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='pathologie' 
    							AND pa.sousPartie='dysthyroidie' 
    							AND qu.valeur='1' order by pa.numDossier) dysthy
    						ON osteo.numDossier=dysthy.numDossier) P3
    					INNER JOIN
    						(SELECT neuro.numDossier, neuro.neurologie, Px.thrombo,
    						Px.hta
    						FROM
    							(SELECT pa.numDossier, qu.libelle as neurologie
    							FROM Partie pa INNER JOIN Question qu 
    							ON pa.IdPartie=qu.IdPartie
    							WHERE pa.nomPartie='pathologie' 
    							AND pa.sousPartie='neurologie' 
    							AND qu.valeur='1' order by pa.numDossier) neuro
    						INNER JOIN
    							(SELECT thrombo.numDossier, thrombo.thrombo, hta.hta
    							FROM
    								(SELECT pa.numDossier, qu.libelle as thrombo
    								FROM Partie pa INNER JOIN Question qu 
    								ON pa.IdPartie=qu.IdPartie
    								WHERE pa.nomPartie='pathologie' 
    								AND pa.sousPartie='thrombo-embolique' 
    								AND qu.valeur='1' order by pa.numDossier) thrombo
    							INNER JOIN	
    								(SELECT pa.numDossier, qu.libelle as hta
    								FROM Partie pa INNER JOIN Question qu 
    								ON pa.IdPartie=qu.IdPartie
    								WHERE pa.nomPartie='pathologie' AND pa.sousPartie='hta' 
    								AND qu.valeur='1' order by pa.numDossier) hta
    							ON thrombo.numDossier=hta.numDossier) Px
    						ON neuro.numDossier=Px.numDossier) P4
    					ON P3.numDossier=P4.numDossier) patho2
    				ON patho1.numDossier=patho2.numDossier) patho
    			ON Nu.numDossier=patho.numDossier) NutriPatho
    		ON obli.numDossier=NutriPatho.numDossier
    		ORDER BY obli.numDossier";
    si vous pouvez me conseiller comment faire autrement. J'ai déja essayer de ne pas utiliser l'instruction JOIN et ne faire qu'avec WHERE mais cela ne donne rien.

    Merci

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    on dirait qu'il y a trop d'imbrications.

    peut-être pourrais-tu créer une table temporaire, dans laquelle tu ferais plusieurs insert / update afin d'arriver au même résultat ?


    désolé je ne peux pas t'aider plus, ton code carrément compliqué

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut
    Merci pour ta réponse.

    J'ai déjà penser à ça ou à la création de vue mais j'ai un autre problème que j'ai poster sur le forum de sécurité sous access.

    En effet je reçois le message d'erreur suivant pour la création de vue

    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] Vous n'avez pas l'autorisation requise pour utiliser l'objet 'MSysTables'. Demandez l'autorisation requise à votre administrateur système ou à la personne ayant créé cet objet., SQL state 42000 in SQLExecDirect in C:\Serveur\Interface\InterfacePROLOG\requete2.php5 on line 3895

    et la suivante pour avoir essayer de créer une table temporaire Personne


    Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] Vous n'avez pas l'autorisation requise pour utiliser l'objet 'Personne'. Demandez l'autorisation requise à votre administrateur système ou à la personne ayant créé cet objet., SQL state 42000 in SQLExecDirect in C:\Serveur\Interface\InterfacePROLOG\requete2.php5 on line 6457


    Je n'ai pas encore eu de réponse.
    Je ne sait plus trop quoi faire

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut
    Bon, j'ai réussi à résoudre le problème de droit sur MSysTable, c'etait un problème de sécurité ACCESS.

    Maintenant, je réussi à créer des vues, mais en utilisant les vues dans ma requete, j'ai toujours le problème de requête trop complexe

    Mes vues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    //vue Obli
    $Q="CREATE VIEW Obli AS
    SELECT q.numDossierPROLOG, q.localisationPrim, r.dateRCOG, p.nomP, p.prenomP, p.dateN, p.sexe, p.rue, p.codeP, p.ville, e.numDossierInstitution, eq.institution, eq.service 
    FROM questionnaire q, RCOG r, patient p, cancer c, envoi e, equipe eq
    WHERE p.IdPatient=q.IdPatient and r.numDossierPROLOG=q.numDossierPROLOG 
    and q.localisationPrim=c.localisationPrim and p.IdPatient=e.IdPatient and e.IdEq=eq.IdEq";
    $R=odbc_exec($connexion, $Q) or die (odbc_error());
     
     
    $social="CREATE VIEW SocioEco AS
    SELECT Ra.numDossierPROLOG, Ra.Statut, Rd.Aidant, Rd.Aide
    FROM 
    	(SELECT pa.numDossierPROLOG, qu.libelle as Statut
    	FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    	ON pa.IdPartieRCOG=qu.IdPartieRCOG
    	WHERE pa.nomPartie='socioEco' AND pa.sousPartie='Statut' AND qu.valeur='1') Ra
    INNER JOIN 
    	(select Rb.numDossierPROLOG, Rb.Aidant, Rc.Aide 
    	FROM
    		(SELECT pa.numDossierPROLOG, qu.libelle as Aidant
    		FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    		ON pa.IdPartieRCOG=qu.IdPartieRCOG
    		WHERE pa.nomPartie='socioEco' AND pa.sousPartie='aidant' AND 
    		qu.valeur='1') Rb
    	INNER JOIN 
    		(SELECT pa.numDossierPROLOG, qu.libelle as Aide
    		FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    		ON pa.IdPartieRCOG=qu.IdPartieRCOG
    		WHERE pa.nomPartie='socioEco' AND pa.sousPartie='aide' 
    		AND qu.valeur='1') Rc 
    	ON Rb.numDossierPROLOG=Rc.numDossierPROLOG) Rd
    ON Ra.numDossierPROLOG=Rd.numDossierPROLOG";
    $caractere=odbc_exec($connexion, $social) or die (print odbc_error());
     
    $patho="CREATE VIEW Patho AS
    SELECT patho1.numDossierPROLOG, patho1.cardiaque as cardiaque, patho1.coronaire as coronaire, patho1.rythme as rythme, patho1.respiratoire as respiratoire, patho1.diabete as diabete, patho2.osteo as osteo_articulaire, patho2.dysthyroidie as dysthyroidie, patho2.neurologie as neurologie, patho2.thrombo as thrombologie, patho2.hta as hta
    FROM	
    	(SELECT P1.numDossierPROLOG, P1.cardiaque, P1.coronaire, P2.rythme,
    	P2.respiratoire, P2.diabete
    	FROM
    		(SELECT card.numDossierPROLOG, card.cardiaque, coro.coronaire
    		FROM
    			(SELECT pa.numDossierPROLOG, qu.libelle as cardiaque
    			FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    			ON pa.IdPartieRCOG=qu.IdPartieRCOG
    			WHERE pa.nomPartie='pathologie' AND pa.sousPartie='cardiaque' 
    			AND qu.valeur='1' order by pa.numDossierPROLOG) card
    		INNER JOIN	
    			(SELECT pa.numDossierPROLOG, qu.libelle as coronaire
    			FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    			ON pa.IdPartieRCOG=qu.IdPartieRCOG
    			WHERE pa.nomPartie='pathologie' AND pa.sousPartie='coronaire' 
    			AND qu.valeur='1' order by pa.numDossierPROLOG) coro
    		ON card.numDossierPROLOG=coro.numDossierPROLOG) P1
    	INNER JOIN	
    		(SELECT rythme.numDossierPROLOG, rythme.rythme, P.respiratoire, 
    		P.diabete
    		FROM
    			(SELECT pa.numDossierPROLOG, qu.libelle as rythme
    			FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    			ON pa.IdPartieRCOG=qu.IdPartieRCOG
    			WHERE pa.nomPartie='pathologie' AND pa.sousPartie='rythme' 
    			AND qu.valeur='1' order by pa.numDossierPROLOG) rythme
    		INNER JOIN
    			(SELECT respi.numDossierPROLOG, respi.respiratoire, 
    			diabete.diabete
    			FROM			
    				(SELECT pa.numDossierPROLOG, qu.libelle as respiratoire
    				FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    				ON pa.IdPartieRCOG=qu.IdPartieRCOG
    				WHERE pa.nomPartie='pathologie' 
    				AND pa.sousPartie='respiratoire' 
    				AND qu.valeur='1' order by pa.numDossierPROLOG) respi
    			INNER JOIN	
    				(SELECT pa.numDossierPROLOG, qu.libelle as diabete
    				FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    				ON pa.IdPartieRCOG=qu.IdPartieRCOG
    				WHERE pa.nomPartie='pathologie' AND pa.sousPartie='diabete' 
    				AND qu.valeur='1' order by pa.numDossierPROLOG) diabete
    			ON respi.numDossierPROLOG=diabete.numDossierPROLOG) P
    		ON rythme.numDossierPROLOG=P.numDossierPROLOG) P2
    	ON P1.numDossierPROLOG=P2.numDossierPROLOG) patho1
    INNER JOIN
    	(SELECT P3.numDossierPROLOG, P3.osteo, P3.dysthyroidie, P4.neurologie, 
    	P4.thrombo, P4.hta
    	FROM
    		(SELECT osteo.numDossierPROLOG, osteo.osteo, dysthy.dysthyroidie
    		FROM
    			(SELECT pa.numDossierPROLOG, qu.libelle as osteo
    			FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    			ON pa.IdPartieRCOG=qu.IdPartieRCOG
    			WHERE pa.nomPartie='pathologie' 
    			AND pa.sousPartie='osteo-articulaire' 
    			AND qu.valeur='1' order by pa.numDossierPROLOG) osteo
    		INNER JOIN	
    			(SELECT pa.numDossierPROLOG, qu.libelle as dysthyroidie
    			FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    			ON pa.IdPartieRCOG=qu.IdPartieRCOG
    			WHERE pa.nomPartie='pathologie' 
    			AND pa.sousPartie='dysthyroidie' 
    			AND qu.valeur='1' order by pa.numDossierPROLOG) dysthy
    		ON osteo.numDossierPROLOG=dysthy.numDossierPROLOG) P3
    	INNER JOIN
    		(SELECT neuro.numDossierPROLOG, neuro.neurologie, Px.thrombo, Px.hta
    		FROM
    			(SELECT pa.numDossierPROLOG, qu.libelle as neurologie
    			FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    			ON pa.IdPartieRCOG=qu.IdPartieRCOG
    			WHERE pa.nomPartie='pathologie' AND pa.sousPartie='neurologie' 
    			AND qu.valeur='1' order by pa.numDossierPROLOG) neuro
    		INNER JOIN
    			(SELECT thrombo.numDossierPROLOG, thrombo.thrombo, hta.hta
    			FROM
    				(SELECT pa.numDossierPROLOG, qu.libelle as thrombo
    				FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    				ON pa.IdPartieRCOG=qu.IdPartieRCOG
    				WHERE pa.nomPartie='pathologie' 
    				AND pa.sousPartie='thrombo-embolique' 
    				AND qu.valeur='1' order by pa.numDossierPROLOG) thrombo
    			INNER JOIN	
    				(SELECT pa.numDossierPROLOG, qu.libelle as hta
    				FROM PartieRCOG pa INNER JOIN QuestionRCOG qu 
    				ON pa.IdPartieRCOG=qu.IdPartieRCOG
    				WHERE pa.nomPartie='pathologie' AND pa.sousPartie='hta' 
    				AND qu.valeur='1' order by pa.numDossierPROLOG) hta
    			ON thrombo.numDossierPROLOG=hta.numDossierPROLOG) Px
    		ON neuro.numDossierPROLOG=Px.numDossierPROLOG) P4
    	ON P3.numDossierPROLOG=P4.numDossierPROLOG) patho2
    ON patho1.numDossierPROLOG=patho2.numDossierPROLOG";
    $resPatho=odbc_exec($connexion, $patho);
    La requête si l'utilisateur a choisi SocioEco et Patho

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //test obli+socioEco+patho
    $tumpath="SELECT Obli.*, SocioEco.Statut, SocioEco.Aidant, SocioEco.Aide, Patho.cardiaque, Patho.coronaire, Patho.rythme, Patho.respiratoire, Patho.diabete, Patho.osteo_articulaire, Patho.dysthyroidie, Patho.neurologie, Patho.thrombologie, Patho.hta
    FROM Obli, SocioEco, Patho
    WHERE Obli.numDossierPROLOG=SocioEco.numDossierPROLOG and Obli.numDossierPROLOG=Patho.numDossierPROLOG
    ORDER BY Obli.numDossierPROLOG";
    $res=odbc_exec($connexion, $tumpath);
    odbc_result_all($res);
    J'ai le message d'erreur comme quoi la requête est trop complexe!!

    J'ai essayé également de créer une table temporaire avec les résultats d'une requête directement comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $table1="CREATE TEMPORARY TABLE table1 AS
    SELECT.......";

    mais apparement on ne peut pas le faire

    Je ne sais plus trop comment faire si vous avez une idée svp!

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    oui : abandonner access, il n'est pas fait pour ce genre de requêtes... Ce sont les limites même du moteur jet, qui d'ailleurs est abandonné depuis quelques années par Microsoft...

    A +

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 122
    Points : 65
    Points
    65
    Par défaut
    Bon, je suis desespéré
    ACCESS m'a été imposé au départ,

    Y-a-t'il une autre manière pour alleger mes requêtes complexes?!!

Discussions similaires

  1. Requete trop complexe
    Par kerneispa dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 11/07/2013, 14h55
  2. requete trop complexe
    Par abjso dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/12/2011, 22h06
  3. Pb update dataset "requete trop complexe"
    Par timotep dans le forum VB.NET
    Réponses: 3
    Dernier message: 24/08/2007, 09h47
  4. Requete trop complexe
    Par sephirothmana dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/01/2007, 15h54
  5. Err. 3360 , 'Requete trop complexe'
    Par fabrice518 dans le forum Access
    Réponses: 4
    Dernier message: 18/11/2005, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo