[PHP/mySQL] afficher une clé sur une page

Résolu
Bonjour,
j'ai un petit problème avec une clé qui ne veut pas s'afficher. Pour vous expliquer le problème, voici un bout de code :

$sql='SELECT * FROM CLIENT, FACTURE, COMMANDE WHERE devis=0';
$res=mysql_query($sql);
while($row=mysql_fetch_array($res))
{

echo'<table border="2" align="center">';

echo'<tr align="center">';
echo'<td><center><font> <b>'.$row["n°facture"].'F</b> </font></center></td>'; //ici le numero de la facture avec un F pour confirmer qu'il ne s'agit pas d'un devis

le soucis étant que n°facture est la clé primaire de FACTURE et aussi une clé étrangère de COMMANDE. D'où mon problème pour identifier la clé par rapport à la bonne table à savoir FACTURE.

Merci d'avance.
Configuration: Windows XP
Firefox 2.0.0.11

7 réponses

  1. Bonjour,

    je pense que le n° facture doit être préfixé par le nom de la table

    select facture.nofac, client.nofac, facture.nofac ...from CLIENT, COMMNADE, FACTURE where ...

    cela pourra peut être solutionner le problème
    1. Commence par éviter le '°' dans un nom de colonne, SQL n'aime pas toujours les caractères spéciaux ('_' passe bien).

      Ensuite, une requête comme la tienne sur plusieurs tables dont des noms de colonnes sont les mêmes, renverra une erreur "Column 'XXX' in where clause is ambiguous " et donc pas de données. Tu ne risque pas de retrouver un n° de facture donc.

      Pour faire une requête sur plusieurs tables liées, qui ont par exemple, le n° de facture/de client commun, il faut utiliser les jointures

      Par exemple :
      
      SELECT Fac.*, Cli.*, Com.*
      FROM facture as Fac
      JOIN client as Cli 
           ON Cli.client_id = Fac.client
      JOIN commande as Com
           ON Com.n_facture = Fac.n_facture
      WHERE Fac.n_facture = 1
      


      Je te renvois sur un tutoriel complet et clair sur les jointures SQL et requêtes sur plusieurs table:
      https://sqlpro.developpez.com/cours/sqlaz/jointures/
      1. bonjours,

        En fait le promblème ne vient pas de SQL mais de la ligne
        echo'<td><center><font> <b>'.$row["n°facture"].'F&l t;/b> </font></center></td>'
        qui ne semble pas reconnaitre les jointures.

        (
         echo'<td><center><font> <b>'.$row["facture.n°facture"].'F&l t;/b> </font></center></td>'
        ne marche pas)
        1. echo '<td><center><font> <b>'.$row["n°facture"].'F</b> </font></center></td>'
          


          Cette ligne ne comporte aucune erreur syntaxique.

          Si effectivement ta reqûete SQL renvois des résultats correcte, vérifie la structure de ton tableau $row avec un var_dump($row), tu sauras ainsi quel index utiliser pour retrouver ton numéro de facture.
          1. Comment je sélectionne l'index dans la ligne de code

            je note echo '<td><center><font> <b>'.$row["index correct"].'F</b> </font></center></td>' ?
            1. l'index d'un tableau est le "nom" donné à une case. Par défaut c'est 0 pour la première, 1, 2, 3, etc

              D'ailleurs tu viens de me faire tilter sur un détail que je n'avais pas remarqué.
              En utilisant mysql_fetch_array(), les index de ton tableau de retour seront 0, 1, 2, etc

              Si tu veux pouvoir appeler tes variables par $row["nom_colonne"], il faut utiliser mysql_fetch_assoc()
              https://www.php.net/manual/fr/function.mysql-fetch-assoc.php
              1. bon, j'ai recréé ma BDD en renommant chaque clé primaire et étrangère de façon à ne pas avoir de conflit sur les nom.