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

Requêtes MySQL Discussion :

Requête avec champ variable en fonction de la version de la BDD


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 803
    Points : 34 074
    Points
    34 074
    Billets dans le blog
    14
    Par défaut
    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.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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 !

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 803
    Points : 34 074
    Points
    34 074
    Billets dans le blog
    14
    Par défaut
    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.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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 !

  6. #6
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 803
    Points : 34 074
    Points
    34 074
    Billets dans le blog
    14
    Par défaut
    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 ?

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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 !

  8. #8
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 : 16 803
    Points : 34 074
    Points
    34 074
    Billets dans le blog
    14
    Par défaut
    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 ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Points : 394
    Points
    394
    Par défaut
    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

Discussions similaires

  1. [AC-2007] Requête avec champ variable
    Par philmarseille dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/01/2012, 08h39
  2. [Toutes versions] Requêtes avec champs variables
    Par damsmut dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/05/2010, 10h27
  3. Requête SQL avec champs variable
    Par yannydu dans le forum Débuter
    Réponses: 14
    Dernier message: 21/04/2009, 13h41
  4. Faite une requête avec une variable contenu dans un champ
    Par Space Cowboy dans le forum Débuter
    Réponses: 3
    Dernier message: 18/11/2008, 15h45
  5. Création requète avec champs heure
    Par philpaul dans le forum Contribuez
    Réponses: 24
    Dernier message: 30/09/2005, 16h53

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