ajouter une condition à une jointure de 2 tables

Petit nouveau ! | 6 Messages

28 juil. 2020, 14:57

Bonjour,

J’ai récupéré un script d’un vieux forum (2005) et mis sous PHP7.

je le modifie en multi forum ( pour plusieurs classes) et je suis sur les dernières modif

Pour cela j’ai crée un champ forum (même nom) sur toute les tables et l’élève pointera sur son forum, via une session, dès qu’il se connecte.

Là, j’ai un script avec une jointure et malgré le temps passé je n’arrive pas a faire ce que je veux soit :

il faut que le champ forum de la table mp soit egal au champ forum de la table message et que les 2 soit égales à la variable $nom_forum

Le script original :

Code : Tout sélectionner

if(!isset($_GET['send'])) { $sql = 'SELECT p.*,m.pseudo FROM '.$prefixtable.'mp AS p LEFT JOIN '.$prefixtable.'membres AS m ON p.idde=m.id WHERE ida = "'.intval($idmembre).'" ORDER BY id DESC '; } else { $sql = 'SELECT p.*,m.pseudo FROM '.$prefixtable.'mp AS p LEFT JOIN '.$prefixtable.'membres AS m ON p.ida=m.id WHERE idde = "'.intval($idmembre).'" ORDER BY id DESC '; }
Il faut dire que du PHP je ne maitrise que les fonctions élémentaires

Merci pour votre aide
Antoine

Petit nouveau ! | 6 Messages

28 juil. 2020, 17:23

OUf!! résolut du moins je pense.
La solution

Code : Tout sélectionner

if(!isset($_GET['send'])) { $sql = 'SELECT p.*,m.pseudo FROM '.$prefixtable.'mp AS p LEFT JOIN '.$prefixtable.'membres AS m ON p.idde=m.id WHERE ida = "'.intval($idmembre).'" and m.forum = "'.add_gpc($numduforum).'" and p.forum = "'.add_gpc($numduforum).'" ORDER BY id DESC '; } else { $sql = 'SELECT p.*,m.pseudo FROM '.$prefixtable.'mp AS p LEFT JOIN '.$prefixtable.'membres AS m ON p.ida=m.id WHERE idde = "'.intval($idmembre).'" and m.forum = "'.add_gpc($numduforum).'" and p.forum = "'.add_gpc($numduforum).'" ORDER BY id DESC '; }

Mammouth du PHP | 881 Messages

29 juil. 2020, 23:19

Ça fait beaucoup de code à changer en cas d'évolution du projet.
Voici une solution plus économe: ne fais porter la condition que sur l'élément qui change ( ici, je ne trouve de différence qu'entre p.idde et p.ida

par conséquent, ton code pourrait être simplifié en :
$sql = 'SELECT p.*,m.pseudo FROM '.$prefixtable.'mp AS p LEFT JOIN '.$prefixtable.'membres AS m ON '.((!isset($_GET['send'])) ? 'p.idde=m.id WHERE ida' : 'p.ida=m.id WHERE idde' ).' = "'.intval($idmembre).'" and m.forum = "'.add_gpc($numduforum).'" and p.forum = "'.add_gpc($numduforum).'" ORDER BY id DESC ';
ou la différence confiée à une variable et cette dernière intégrée à la construction de ta requête:
$Variante = (!isset($_GET['send'])) ? 'p.idde=m.id WHERE ida' : 'p.ida=m.id WHERE idde' ;

$sql = 'SELECT p.*,m.pseudo FROM '.$prefixtable.'mp AS p LEFT JOIN '.$prefixtable.'membres AS m ON '.$Variante.' = "'.intval($idmembre).'" and m.forum = "'.add_gpc($numduforum).'" and p.forum = "'.add_gpc($numduforum).'" ORDER BY id DESC ';
Soyez artisans de paix

Petit nouveau ! | 6 Messages

31 juil. 2020, 10:20

Merci. Je n'aurai pas pensé tout seul, il y des logiques php que je maîtrise peu.

Encore merci pour cette solution.