[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
    0
    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/
      0
      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)
        0
        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.
          0
          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>' ?
            0
            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
              0
              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.
                0