Lien entre 2 tables sans retrait

Bonjour,

La recherche est facile à énoncer ... mais je ne sais pas par où m'orienter au départ :

2 tables : Produits et Promos avec un lien dans Promos qui reprend l'ID de Produits.

Je voudrais afficher tous les produits mais quand c'est en promo, afficher le prix en promo !

J'ai beau essayer ...

Merci par avance

10 réponses

  • Votes
  • Date
  • Date décroissante
  1. Voici l'une des requetes que j'ai essayé de faire (mais qui ne fonctionne pas :-() :

    <CFQUERY name="TableProduits2" datasource="#session.dbname#">
    SELECT
    Produits.Prod_ID,
    Produits.Fam_ID,
    Produits.SiteName,
    Produits.PU,
    Produits.Prod_HT,
    Produits.Qte
    Produits_promos.PPromos_ID,
    Produits_promos.Prod_ID,
    Produits_promos.Promotion,
    Produits_promos.Promo_contenu,
    Produits_promos.Promo_deb,
    Produits_promos.Promo_fin
    FROM Produits,Produits_promos
    WHERE Produits.SiteName='#Session.site#'
    AND Produits.Fam_ID = 363
    ORDER BY Produits.Prod_ID
    </CFQUERY>

    Je n'ai fait cela ! et je ne sais pas par où m'orienter !

    Merci par avance
    1. Contributeur
      "qui ne fonctionne pas": message d'erreru, résultat inattendu?
  2. pas de msg d'erreur mais ne fais pas ce que je veux !

    La recherche est facile à énoncer ... mais je ne sais pas par où m'orienter au départ :

    2 tables : Produits et Promos avec un lien dans Promos qui reprend l'ID de Produits.

    Je voudrais afficher tous les produits mais quand c'est en promo, afficher le prix en promo !
    1. Contributeur
      montre-nous donc ce que cela fait, et explique en quoi cela diffère de ce que tu souhaites.
      cela va probablement t'aider à progresser vers la solution.
  3. Pour être complet, je rajoute :

    <TR>
    <TD class="txtmm"> Quantité *</TD><!--- Quantité --->
    <TD class="txtmm">
    <SELECT name="form.Prod_ID" required="yes">
    <OPTION class="txtmm" value="">Réponse Quantité requise</OPTION><!--- Réponse Quantité requise --->
    </CFOUTPUT>
    <CFOUTPUT query="TableProduits2">
    <CFIF #TablePromos.Promotion# IS 0>
    <OPTION class="txtmm" value="#Prod_ID#">#TableProduits2.Qte# cartiboks à #lsnumberformat(TableProduits2.PU,'9.99')# € HT pièce soit #lsnumberformat(TableProduits2.Prod_ht,'9.99')# € HT</OPTION>
    <CFELSE>
    <CFIF #TablePromos.Promo_contenu# IS "P">
    <cfset PPU=(#PU#*(100-#TablePromos.Promotion#)/100)>
    <cfset PHT=(#Prod_ht#*(100-#TablePromos.Promotion#)/100)>
    <OPTION style="background: red" value="#TableProduits2.Prod_ID#">#TableProduits2.Qte# cartiboks à #lsnumberformat(PPU,'9.99')# € HT pièce soit #lsnumberformat(PHT,'9.99')# € HT</span></OPTION>
    </CFIF>
    <CFIF #TablePromos.Promo_contenu# IS "Q">
    <cfset PQte=(#TableProduits2.Qte#*(100+#TablePromos.Promotion#)/100)>
    <OPTION style="background: green" value="#TableProduits2.Prod_ID#">#PQte# cartiboks à #lsnumberformat(TableProduits2.PU,'9.99')# € HT pièce soit #lsnumberformat(TableProduits2.Prod_ht,'9.99')# € HT</span></OPTION>
    </CFIF>
    </CFIF>
    </CFOUTPUT>
    </SELECT>
    </TD>
    </TR>




    Ce sera plus facile pour comprendre !
    Merci par avance
    1. Contributeur
      tu ne montres pas quelles sont les données dans les deux tables.
      montre-nous le résultat de la requête, avant la mise en page par ton code.
    2. @yg_be????? c'est au dessus !!
  4. Contributeur
    est-ce ton premier exercice de jointure entre tables?
    je suggère de commencer par des exercices plus simples.
    1. Modérateur
      Bonjour,

      (sans certitude pour la syntaxe n'ayant pas de sqlserver sous la main... )
      Mais, Avec une jointure et une vérif sur isnull
      Un truc du genre
      SELECT 
          P.Prod_ID,
          P.Fam_ID,
          P.SiteName,
          P.PU,
          P.Prod_HT,
          P.Qte
          PP.PPromos_ID,
          PP.Prod_ID,
          PP.Promotion,
          PP.Promo_contenu,
          PP.Promo_deb,
          PP.Promo_fin,
          ISNULL(PP.Promotion,P.PU) as PRIX
        FROM Produits P 
        LEFT JOIN Produits_promos PP ON PP.Prod_ID = P.Prod_ID
        WHERE P.SiteName='#Session.site#'
          AND P.Fam_ID = 363
        ORDER BY P.Prod_ID	
      

      1. Bonjour,
        Avant tout merci de votre aide !
        Mais ce n'est pas encore cela :-(
        ISNULL(PP.Promotion,P.PU) as PRIX ne supporte qu'1 argument.
        Difficulté supplémentaire PP.promos n'est pas un prix mais un pourcentage.
        Pour l'instant cela 0 ou -1 au niveau du prix quand j'enlève , P.PU à ISNULL
        Merci pour votre patience !
        Cordialement
        1. Modérateur
          C'est bien à SQL server que tu utilises comme base de données ?
          Quelle version ?

          Car la fonction is null en SQL server accept 2 paramètres...

          Et sinon, tu peux très bien utiliser à If.

          pour ce qui est des champs, n'ayant pas d'explication dans ce que tu nous a donné j'ai fait au jugé. À toi de remplacer par les bons champs.
      2. Bonsoir
        Excusez cette interruption due à une grosse grippe !
        Mais malgré vos conseils pas de solution en vue
        Je joins les 2 tables :


        Merci par avance
        1. Modérateur
          Je te repose donc mes deux principales questions :

          C'est bien à SQL server que tu utilises comme base de données ?
          Quelle version ?
      3. J'utilise une base accès !!
        1. Modérateur
          Ah ben alors forcément les réponses que je te donne risque de ne pas fonctionner....
          D'où l'importance de correctement choisir le forum dans lequel on pose ces questions...

          Je déplace donc ta question dans le forum access !
      4. Bonjour,

        HELP !!

        Un coup de main en ... Access

        Merci par avance