problème de jointure.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème de jointure.

Re: problème de jointure.

par Ryle » 23 mai 2012, 12:58

C'est le type de jointure qu'il te faut alors modifier.
Une jointure interne (INNER JOIN) ne te retourne que les enregistrements qui ont une correspondance dans les deux tables. Donc si l'un des enregistrements n'a pas de correspondance dans l'autre table, il n'est pas retourné.
Une jointure externe (OUTER JOIN) te retourne quant à elle tous les enregistrements de la table demandée (en précisant LEFT ou RIGHT pour savoir quelle est la table concernée), qu'il y ait ou non des correspondance dans la table jointe. Si aucune correspondance n'est trouvée, l'enregistrement est quand même retourné avec des valeurs à null pour les champs de l'autre table :)

Re: problème de jointure.

par piotrowski-s » 23 mai 2012, 08:39

ça fonctionne presque. Maintenant j'ai un autre soucis, c'est que la table liasse ne contient pas forcément toujours des informations mais dans ce cas j'aurais besoin quabnd meme de réaliser la somme des informations contenu dans la table facture.

savez vous comment je pourrais procéder à partir de cette requête ci:
SELECT SUM(  `factures`.`montant` ) + SUM(  `liasses`.`montant` ) AS montant
FROM  `factures` 
INNER JOIN  `liasses` ON  `factures`.`n_doss` =  `liasses`.`n_doss` 
WHERE  `factures`.`n_doss` =  '110015666223'
par avance merci.

Re: problème de jointure.

par Ryle » 22 mai 2012, 18:29

Ah ben non, la colonne "montant" n'est pas retournée par ta requête, donc l'index n'existe pas. Actuellement, l'index retourné par ta requête est "SUM(`factures`.`montant`) + SUM(`liasses`.`montant`)" (ce qui est juste un peu galère à utiliser ;))

Il te suffit donc de rajouter un alias à ce calcul pour pouvoir récupérer le résultat :)
SELECT SUM(factures.montant) + SUM(liasses.montant) AS montant ...

Re: problème de jointure.

par piotrowski-s » 22 mai 2012, 16:53

j'ai bien fait la modification tel qu'il est ici:
  <?php $sql17  = "SELECT SUM(`factures`.`montant`) + SUM(`liasses`.`montant`) FROM `factures` INNER JOIN `liasses` ON `factures`.`n_doss`=`liasses`.`n_doss` WHERE `factures`.`n_doss`='".mysql_real_escape_string($_GET['n_doss'])."'";
$req17 = mysql_query ($sql17) or die ('Erreur SQL !<br>'.$sql17.'<br>'.mysql_error ()); 

while($data119 = mysql_fetch_assoc ($req17)) 

{ 
$sd1 = number_format(($data119['montant']+ $tx-$nbr4)  , 2, ',', ' ');
echo $sd1 ;   ?> <?php } ?>
mais maintenant il me dit undefined Notice: Undefined index: montant in C:\wamp\www\NEOGETCASH\GESTIONNAIRE\tableau-central

je ne comprends pas la variable est censée exister.

Re: problème de jointure.

par Ryle » 22 mai 2012, 11:32

La fonction somme te permet de faire la sommes des valeurs d'une colonne, pas de faire des additions. Pour cela il te suffit d'utiliser le " + " :)

Quant au message colonne ambigu, ce n'est pas une question d'alias c'est parce que tu as deux colonnes de même nom et qu'il ne sait pas de laquelle tu parles si tu ne les préfixes pas.

SELECT SUM(table1.colonne) + SUM(table2.colonne) .... devrait fonctionner :)

Re: problème de jointure.

par piotrowski-s » 22 mai 2012, 09:49

j'ai changé la requête ainsi:
 <?php $sql17 = "SELECT SUM(`factures`.`montant`) as `montant` FROM `factures` INNER JOIN `liasses` ON `factures`.`n_doss`=`liasses`.`n_doss` WHERE `factures`.`n_doss`='".mysql_real_escape_string($_GET['n_doss'])."'";

?>
ça me fait bien la somme de toutes les lignes mais que pour une seule table. Il ne me fait pa sla deuxième.

Re: problème de jointure.

par piotrowski-s » 22 mai 2012, 09:47

non en fait je veux faire la somme de deux colones mais pour chaque élément et ces deux colones intitulées montant sont dans deux tables différentes.

Re: problème de jointure.

par Mazarini » 22 mai 2012, 09:45

SELECT SUM(montant) as montant...
Il ne faut pas mettre comme alias un nom de colonne, enfin c'est l’ambiguïté que je vois dans ta requête.
SELECT SUM(montant) as montant_total...
Tu peux aussi essayer de préfixer montant par le nom de la table, mais j'ai un doute.

Je ne suis pas sur d'avoir compris ton problème. Si tu veux additionner 2 colonnes, c'est select table1.montant + table2.montant.

problème de jointure.

par piotrowski-s » 22 mai 2012, 09:33

Bonjour à tous, je souhaites faire la somme de deux champs, dont les paramètres sont définis dans ma requête.

le soucis c'est qu'il me dit que le champs montant est ambigue et par conséquent me renvoi une erreur.

voici le code
<?php $sql17 = "SELECT SUM(montant) as montant FROM `factures` INNER JOIN `liasses` ON `factures`.`n_doss`=`liasses`.`n_doss` WHERE `factures`.`n_doss`='".mysql_real_escape_string($_GET['n_doss'])."'";
$req17 = mysql_query ($sql17) or die ('Erreur SQL !<br>'.$sql17.'<br>'.mysql_error ()); 

while($data119 = mysql_fetch_assoc ($req17)) 

{ 
$sd1 = number_format(($data119['montant']+ $tx-$nbr4)  , 2, ',', ' ');
echo $sd1 ;   ?>
Parcontre j'ai dans deux table deux fois le nom de champs identique (pour fair ela jointure) et ausis pour afficher le montant.

Je ne sais pas comment résoudre ce problème.

Par avance merci.