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 28/05/2011, 11h23   #1
Invité de passage
 
Inscription : mai 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 4
Points : 0
Points : 0
Par défaut Requête avec champ variable en fonction de la version de la BDD

Je vous explique mon problème ...

J'ai une BDD dont je ne maitrise pas la création et modification des champs (PRESTASHOP pour ne pas la citer) dont un des champs d'une table vient d'être renommé et cela me pose un problème sur les jointures.

En effet, le champ donné existe mais porte soit le nom id_tax soit le nom id_tax_rules_group (en fonction de la version de prestashop)

Un extrait de ma requête ...

Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT o.id_order, o.invoice_date, o.id_customer, c.id_gender, ad.lastname, ad.firstname, ad.company, c.birthday, ad.phone_mobile, 
c.email, ad.address1, ad.address2, ad.city, ad.postcode, cadl.name, ad.phone, ai.address1 AS delivery_address1, 
ai.address2 AS delivery_address2, ai.city AS delivery_city, ai.postcode AS delivery_postcode, cail.name AS delivery_name, 
o.payment, cu.name AS currency, o.total_products, o.total_paid_real, IFNULL(o.total_products_wt, o.total_paid) as total_products_wt, o.total_shipping, o.date_add, o.delivery_info, 
ca.name AS shipping_method, IFNULL(t.rate, 0) AS shipping_rate
FROM psf_orders AS o, psf_customer AS c, psf_address AS ad, psf_address AS ai, psf_country AS cad,
psf_country AS cai, psf_country_lang AS cadl, psf_country_lang AS cail, psf_currency AS cu,
psf_order_history AS oh, psf_order_state AS os, psf_order_state_lang AS osl, psf_carrier AS ca 
LEFT JOIN psf_tax AS t ON (ca.id_tax_rules_group = t.id_tax)
WHERE o.id_address_invoice = ad.id_address
AND ad.id_country = cad.id_country ...
Le problème est sur le champ en gras qui fait partie d'un LEFT JOIN.

J'ai essayé en testant l'existence du champ avec :
Code :
SHOW COLUMNS FROM psf_tax_rules_group LIKE 'id_tax_rules_group'
qui retourne bien 1 enregistrement si le champ est nommé de cette manière et 0 s'il n'existe pas, mais je n'arrive pas à traiter ce résultat dans l'idée d'un IF(resultat show_columns =1,'id_tax_rules_group','id_tax')

Si quelqu'un a un idée, j'ai passé plusieurs heures dessus, et ne trouve pas de solutions :-(

Merci par avance.
point2vente est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2011, 09h37   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 007
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 007
Points : 18 278
Points : 18 278
Envoyer un message via MSN à CinePhil
Je ne vois pas d'autre solution que de tester la version de Prestashop dans ton code et d'adapter la requête en conséquence.
__________________
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 29/05/2011, 10h31   #3
Invité de passage
 
Inscription : mai 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 4
Points : 0
Points : 0
Merci pour la réponse ...

Mais, cela m'est impossible, je ne peux travailler qu'avec une requête SQL.

Mon application gère OsCommerce et Prestashop, il m'est impossible de sortir d'une requête !
point2vente est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2011, 13h19   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 007
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 007
Points : 18 278
Points : 18 278
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par point2vente Voir le message
Mon application
Si c'est ton application, tu peux la modifier comme tu veux non ?

Si vraiment tu ne peux pas changer le code de cette application, je suppose qu'il existe un forum Prestashop et que d'autres utilisateurs ont dû être confrontés au même problème.
__________________
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 29/05/2011, 17h13   #5
Invité de passage
 
Inscription : mai 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 4
Points : 0
Points : 0
Merci pour votre réponse.

Bien sur que je peux modifier mon application, mais il est impossible que je puisse rajouter un test comme celui-ci, il faut que je trouve une solution par le SQL ; je reste persuadé qu'il existe une possibilité autour des IF ou triggers pour réaliser ce test.

Il doit bien y avoir la possibilité de créer une fonction qui sera exécutée avec la requête d'INSERT, requête qui aurait le nom du champ 'variable' en paramètre, lui même renvoyé par la fonction !
point2vente est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2011, 18h35   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 007
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 007
Points : 18 278
Points : 18 278
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par point2vente Voir le message
Bien sur que je peux modifier mon application, mais il est impossible que je puisse rajouter un test comme celui-ci
Pourquoi donc ?
__________________
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 29/05/2011, 19h45   #7
Invité de passage
 
Inscription : mai 2009
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 4
Points : 0
Points : 0
Parce que toute mon appli tourne autour d'une relative unicité de traitement, avec les requêtes SQL en fonction de l'application e-commerce utilisée.

Jusqu'à présent, j'ai pu respecté ce critère fondamental, et je ne souhaite pas déroger à la règle ; d'autant que je reste certain que MySQL permet cela, j'ai cherché encore en vain toute l'après-midi, mais c'est certain !
point2vente est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2011, 20h16   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 007
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 007
Points : 18 278
Points : 18 278
Envoyer un message via MSN à CinePhil
Puisque, si je comprends bien, les requêtes de ton appli sont déjà différentes suivant l'application qu'elle utilise, ajouter une variable globale pour cette seule différence entre les versions de Prestashop et un seul test de version ne doit pas changer fondamentalement ton appli ? Certes, ça demande de repasser sur toutes les requêtes contenant cette colonne renommée pour la remplacer par la variable mais ce n'est pas la mère à boire non ?
__________________
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/05/2011, 17h41   #9
Membre éclairé
 
Inscription : avril 2009
Messages : 331
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2009
Messages : 331
Points : 397
Points : 397
Tu as regardé du côté des "prepared statements"?

Cet excellent article pourra te donner des idées :
http://rpbouman.blogspot.com/2005/11...yntax-and.html

Rachid
mydb_server est dé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 20h15.


 
 
 
 
Partenaires

Hébergement Web