Page 1 sur 1

un souci dans une amélioration d'un code réalisé ici

Posté : 27 juil. 2019, 16:30
par Sebasto
Bonjour,

J'ai besoin d'une correction sur un nouveau code à peine amélioré d'un ancien réalisé ici.

Je coince et je ne sais pas pourquoi (encore peu expérimenté!)

C'est pour un menu vertical gauche (qui marche), avec blabla A., etc. auquel je veux ajouter une info entre parenthèses à chaque ligne.
Pas de souci si l'info en plus était dans la même table, mais non alors avec une jointure avec un champ commun et identique ligne à ligne, je croyais que ce serait plié.
Mais NON!

Le code est facile à lire ci-après (l'ancien qui marche, et le nouveau, après, qui est désactivé)

Code : Tout sélectionner

$requete = $connexion->prepare("SELECT Rk_Hist, Reversed_name FROM taxabase1 ORDER BY Reversed_name"); /*$requete = $connexion->prepare("SELECT Rk_Hist, Reversed_name, Annual_if FROM taxabase1 left outer join taxabase2 on (taxabase1.Rk_Hist = taxabase2.Rk_Hist) WHERE taxabase1.Rk_Hist is not null ORDER BY Reversed_name"); $requete->bindParam(':Rk_Hist', $Rk_Hist, PDO::PARAM_INT);*/ $requete->execute(); $result = $requete->fetchAll(); $initialetter = ''; foreach($result as $row){ $myassociatedlink = $row["Reversed_name"]; $initName = strtoupper(substr($myassociatedlink, 0, 1)); if (strtoupper($initName) != $initialetter) { echo '<br><p id="' . $initName . '">&nbsp;&nbsp;' . $initName . '</p>'; $initialetter = strtoupper($initName); } echo'<p>&nbsp;&nbsp;<a href="xxxx.php?Rk_Hist=' . $row["Rk_Hist"] . ' rel="nofollow noopener noreferrer" target="_blank"' . '"><i>' . $row["Reversed_name"] . '</i></a></p>'; //echo'<p>&nbsp;&nbsp;<a href="xxxx.php?Rk_Hist=' . $row["Rk_Hist"] . ' rel="nofollow noopener noreferrer" target="_blank"' . '"><i>' . $row["Reversed_name"] . '&nbsp;(' . $row["Annual_if"] . ')</i></a></p>'; }
J'ai vérifié dans PHP Myadmin que la réquête suivante marche et donne le bon résultat :
SELECT Reversed_name, Annual_if FROM taxabase1 left outer join taxabase2 on (taxabase1.Rk_Hist = taxabase2.Rk_Hist) WHERE taxabase1.Rk_Hist is not null ORDER BY Reversed_name

Dans localhost, j'ai
Notice: Undefined index: Rk_Hist in C:\xxx.php on line 50

et si j'ajoute Rk_Hist, comme SELECT Rk_Hist, Reversed_name, Annual_if FROM taxabase1 left outer join taxabase2 on (taxabase1.Rk_Hist = taxabase2.Rk_Hist) WHERE taxabase1.Rk_Hist is not null ORDER BY Reversed_name
je n'ai plus de menu du tout

Pouvez-vous m'aider à corriger mon ajout de code svp?

Merci

Seb

Re: un souci dans une amélioration d'un code réalisé ici

Posté : 27 juil. 2019, 16:40
par or 1
peut-être :
SELECT taxabase1.Rk_Hist, taxabase1.Reversed_name, taxabase2.Annual_if FROM taxabase1 left outer join taxabase2 on (taxabase1.Rk_Hist = taxabase2.Rk_Hist) WHERE taxabase1.Rk_Hist is not null ORDER BY Reversed_name

après il faut se demander si la structure de la base de donnée est correcte. pourquoi y-a-t il 2 tables ?

Re: un souci dans une amélioration d'un code réalisé ici

Posté : 30 juil. 2019, 18:22
par Sebasto
Bonjour or1,

Bravos c'est bien cela!
Et merci.

Si je peux te prendre un minute pour ma compréhension.
Ta requête et la mienne marchent toutes les 2 dans Phpmyadmin en direct sur la base.

Mais dans localhost seul ton code marche, pourquoi???

Sinon pas de souci tout le site fonction avec de multiples jointures sur des centaines de pages... il n'y avait que l'amélioration de mon menu qui posait probleme.

Encore merci à toi l'expert

Seb, le petit éléphanteau!

Re: [RESOLU] un souci dans une amélioration d'un code réalisé ici

Posté : 31 juil. 2019, 14:47
par Ryle
Hello !

C'est étonnant que tu n'ais pas eu d'erreur dans Phpmyadmin avec ta requête.

Le problème vient du fait que dans tes deux tables taxabase1 et taxabase2 tu disposes d'une colonne nommée "Rk_Hist". Dès lors, si tu fais une jointure entre ces deux tables et que dans ton select tu demandes la valeur de la colonne Rk_Hist, MySQL doit te retourner une erreur en indiquant que le nom de la colonne est ambiguë (ou un truc du genre), car il ne sait pas à laquelle des deux colonnes Rk_Hist tu souhaites avoir accès (celle qui est dans taxabase1 ou celle qui est dans taxabase2). Il ne cherche pas à savoir si les deux valeurs sont identiques, dans la mesure où elles pourraient ne pas l'être et dans le doute, il retourne - en principe - une erreur et attends de toi que tu précises ce que tu lui veux ;)

Le fait de préfixer ta colonne par le nom de la table ou un alias, permet au moteur de savoir quelle donnée tu attends sans ambiguïté possible et ainsi de te retourner la valeur que tu demandes :)

Re: [RESOLU] un souci dans une amélioration d'un code réalisé ici

Posté : 10 août 2019, 17:12
par Sebasto
Eh oui Ryle, étonnant mais vrai.
Je comprend et donc je veillerai à cela à l'avenir.

Merci!
Seb