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 30/01/2012, 11h50   #1
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
Par défaut unknow column '' in 'on clause'

Bonjour à tous.

J'ai un problème qui je pense porte sur différentes versions de mysql.

Je m'explique, en local mon site fonctionne parfaitement.

Quand j'ai voulu mettre mon site en ligne j'ai un problème de ce type: 'Unknown column 'action.NUM_RES' in 'on clause'' .
Après plusieurs recherches j'ai trouvé que c'est parce que la version de mysql en ligne n'est pas la même qu'en local.

J'ai donc légèrement modifié ma requête :

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
(SELECT  action.REF_ADR_LOC, action.DATE_ACT,action.DESC_ACT,action.FLAG_ALE,type_action.LIB_TYP_ACT,employe.TRG  AS EMP,action.NUM_ACT,action.NUM_DOS,resultat.LIB_RES	,c.NUM_CON,action.DATE_RAPPEL, 
CONCAT(contact_locataire.PRE_CON_LOC,' ',contact_locataire.NOM_CON_LOC) AS CON_LOC, 
CONCAT( action.TEL_CON_LOC, ' ', action.MAIL_CON_LOC) AS MAIL_CON_LOC , ACT_PLA 	
FROM 	(action , contrat c) 
LEFT OUTER JOIN 	locataire ON (locataire.NUM_DOS = action.NUM_DOS)
LEFT  OUTER JOIN 	resultat ON (action.NUM_RES = resultat.NUM_RES)
LEFT OUTER JOIN	type_action ON (action.ID_TYPE_ACT = type_action.ID_TYPE_ACT)
LEFT OUTER JOIN	employe  ON (action.MATR_EMP = employe.MATR_EMP)
LEFT OUTER JOIN	contact_locataire ON  (action.REF_CON_LOC = contact_locataire.REF_CON_LOC)
WHERE
  action.NUM_DOS='".$NUM_DOS."'
AND c.NUM_DOS = locataire.NUM_DOS 
AND c.PRINCIPAL = '1' )
 
 UNION 
 
 /*Récupération des notes des employés*/
 
(SELECT '0' AS REF_ADR_LOC,datecreer AS DATE_ACT,note AS DESC_ACT ,'1' AS FLAG_ALE ,'NOTE' AS LIB_TYP_ACT
, employe.TRG  AS EMP,'1' AS NUM_ACT ,'NUM_DOS' AS NUM_DOS ,''  AS LIB_RES ,'1' AS NUM_CON ,'1' AS DATE_RAPPEL,'' AS   CON_LOC,'' AS MAIL_CON_LOC,'' AS  ACT_PLA 
 FROM (notes n)  
JOIN 	employe ON (n.user_id=employe.MATR_EMP)
 
WHERE NUM_DOS='".$NUM_DOS."'
AND employe.MATR_EMP < 100
)
 
 UNION 
 /*Récupération des notes des clients*/
 
(SELECT '0' AS REF_ADR_LOC,datecreer AS DATE_ACT,note AS DESC_ACT ,'1' AS FLAG_ALE ,'NOTE' AS LIB_TYP_ACT   
, concat(contact_client.NOM_CON_CLI,' ' , contact_client.PRE_CON_CLI)   AS EMP,'1' AS NUM_ACT ,'NUM_DOS' AS NUM_DOS ,''  AS LIB_RES ,'1' AS NUM_CON ,'1' AS DATE_RAPPEL,'' AS   CON_LOC,'' AS MAIL_CON_LOC,'' AS  ACT_PLA 
FROM (notes n) 
 
JOIN contact_client ON (n.user_id=contact_client.REF_CON_CLI)
WHERE NUM_DOS='".$NUM_DOS."'
AND contact_client.REF_CON_CLI >99  
)
 ORDER BY DATE_ACT ASC
j'ai testé ma requête dans phpmyadmin dans l'environnement en ligne et elle fonctionne.
Cependant sur le site elle ne fonctionne pas ce qui me fait désespérer


Merci à tous pour votre aide
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 12h20   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Ouch ! Quelle requête !

1) Pour commencer, l'utilisation systématique d'alias dès qu'il y a plus d'une table dans une requête rend celle-ci plus facile à écrire, à lire, à corriger.

2)
Citation:
Code :
1
2
3
FROM (action , contrat c)
 
AND c.NUM_DOS = locataire.NUM_DOS
La première ligne du FROM fait un produit cartésien entre action et contrat alors qu'il y a une condition de jointure entre contrat et locataire. Il vaudrait donc mieux faire une vraie jointure !

3) Inutile de mettre des parenthèses partout, notamment autour des conditions de jointure !

4) Les entêtes des colonnes résultat d'une union de requêtes sont déterminées par celles de la première requête.
Inutile donc de répéter ces entêtes sur les autres requêtes de l'UNION.

En tenant compte de ce qui précède, ta requête deviuent celle-ci :
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
(
SELECT  a.REF_ADR_LOC, a.DATE_ACT, a.DESC_ACT, a.FLAG_ALE,
	ta.LIB_TYP_ACT,
	e.TRG AS EMP,
	a.NUM_ACT, a.NUM_DOS,
	r.LIB_RES,
	c.NUM_CON,
	a.DATE_RAPPEL, 
	CONCAT(cl.PRE_CON_LOC,' ', cl.NOM_CON_LOC) AS CON_LOC, 
	CONCAT(a.TEL_CON_LOC, ' ', a.MAIL_CON_LOC) AS MAIL_CON_LOC , 
	ACT_PLA -- Vient de quelle table ?
FROM action a
LEFT OUTER JOIN locataire l ON l.NUM_DOS = a.NUM_DOS
	LEFT OUTER JOIN contrat c ON c.NUM_DOS = l.NUM_DOS
LEFT OUTER JOIN resultat r ON a.NUM_RES = r.NUM_RES
LEFT OUTER JOIN type_action ta ON a.ID_TYPE_ACT = ta.ID_TYPE_ACT
LEFT OUTER JOIN employe e ON a.MATR_EMP = e.MATR_EMP
LEFT OUTER JOIN contact_locataire cl ON a.REF_CON_LOC = cl.REF_CON_LOC
WHERE a.NUM_DOS = '".$NUM_DOS."'
	AND c.PRINCIPAL = '1'
) 
 
UNION 
 
 /*Récupération des notes des employés*/
 
(
SELECT '0', datecreer, note, '1', 'NOTE', e.TRG  AS EMP, '1', 'NUM_DOS', '', '1', '1', '', '', '' 
FROM notes n  
JOIN employe e ON n.user_id = e.MATR_EMP
WHERE NUM_DOS = '".$NUM_DOS."' -- de quelle table vient la colonne NUM_DOS ?
	AND e.MATR_EMP < 100
)
 
UNION 
 
 /*Récupération des notes des clients*/
 
(
SELECT '0', datecreer, note, '1', 'NOTE', 
	CONCAT(cc.NOM_CON_CLI, ' ', cc.PRE_CON_CLI),
	'1', 'NUM_DOS', '', '1', '1', '', '', ''
FROM notes n 
JOIN contact_client cc ON n.user_id = cc.REF_CON_CLI
WHERE NUM_DOS = '".$NUM_DOS."' -- de quelle table vient la colonne NUM_DOS ?
	AND cc.REF_CON_CLI > 99  
)
 
ORDER BY DATE_ACT ASC
Pour l'erreur à laquelle tu es confronté, les symptomes sont quand même bizarres ! Si la colonne existe dans la table, il n'y a pas de raison qu'il te sorte cette erreur, quelle que soit la version de MySQL.

Es-tu sûr que l'erreur provient bien de cette requête ?
__________________
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 30/01/2012, 14h32   #3
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
Tout d'abord merci pour ton intervention

Citation:
La première ligne du FROM fait un produit cartésien entre action et contrat alors qu'il y a une condition de jointure entre contrat et locataire. Il vaudrait donc mieux faire une vraie jointure !
il est vrai que depuis certaines recherches sur Google je me suis aperçu que ce que je faisais était pourrie mais j'ai appris de cette manière avec mes cours alors je suis un peu à la traîne.

Pour les parenthèses en fait j'avais déjà fait des recherches sur Google avec l'erreur qui m'était donné et j'avais trouvé une solution de cette manière.

Citation:
ACT_PLA -- Vient de quelle table ?
elle vient de la table action, comme le numéro de dossier.


Citation:
Pour l'erreur à laquelle tu es confronté, les symptomes sont quand même bizarres !
Totalement, j'avais justement trouvé des réponses en rapport avec la version de MySQL différente en local et en ligne : http://www.oscommerce-fr.info/faq/qa_info.php?qID=198

Plus étonnant sur PHPMyAdmin la requête que j'ai donné passe mais pas "dans le site"

Je suis sur que l'erreur provient bien de cette requête sinon


Encore merci
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 15h48   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
Plus étonnant sur PHPMyAdmin la requête que j'ai donné passe mais pas "dans le site"

Je suis sur que l'erreur provient bien de cette requête sinon
Ce n'est pas logique ! Pas avec cette erreur de colonne non trouvée !

Comment en es-tu sûr ?
Pour en être vraiment sûr, utilise cette méthode :
Code :
1
2
$sql = // la requête
mysql_query($sql) OR die('<br />Erreur SQL : '.mysql_error().'<br />Requête :<br />'.$sql);
Ou un système équivalent qui va afficher la requête en erreur avec l'erreur.
__________________
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 30/01/2012, 16h32   #5
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
j'ai toujours la même chose: affichage de

Citation:
Unknown column 'action.NUM_DOS' in 'on clause'
j'ai essayé en faisant une erreur de variable et il me met bien que ma variable est vide.
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 00h25   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
As-tu affiché la requête qui provoque l'erreur ?
La colonne NUM_DOS existe t-elle bien dans la table action.
Éventuellement, vérifie la casse employée pour nommer les colonnes et 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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 09h27   #7
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
La colonne NUM_DOS appartient bien à la table action , et j'ai affiché la requête il 'agit bien de celle-ci
MenphisTimrid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h28   #8
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
ACTION fait parti des nombreux mots réservés du langage SQL.
Il faut impérativement éviter d'utiliser un mot réservé comme DATE, TYPE, ACTION... pour nommer une table, une colonne, une routine SQL, car cela peut avoir des effets de bord.

A lire : http://sqlpro.developpez.com/cours/motsreserves/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h55   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par SQLpro Voir le message
ACTION fait parti des nombreux mots réservés du langage SQL.
Il faut impérativement éviter d'utiliser un mot réservé comme DATE, TYPE, ACTION... pour nommer une table, une colonne, une routine SQL, car cela peut avoir des effets de bord.

A lire : http://sqlpro.developpez.com/cours/motsreserves/

A +
Tiens ! Je n'avais pas pensé à ça !

Donc pour compléter la réponse de SQLPro, tu peux essayer d'entourer le mot action d'apostrophes inversées (Alt Gr + 7 sur un clavier standard français).
__________________
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 03/02/2012, 10h55   #10
Invité régulier
 
Homme
etudiant
Inscription : décembre 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : etudiant

Informations forums :
Inscription : décembre 2011
Messages : 54
Points : 6
Points : 6
C'est en se trompant que l'on apprends autant pour moi tu avais raison c'était une autre requête qui posait problème

Merci à toi
MenphisTimrid 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 14h07.


 
 
 
 
Partenaires

Hébergement Web