Insérer un IF à l'interieur d'un PRINT / ECHO ?

Bonjour,

Je suis en train de m’arracher le cerveau a essayer de croiser des données de 2 tables et les regrouper. je m’explique.
J’ai 2 tables Formations et clients.
Je voudrais afficher après une requete l’ensemble des clients (et leurs infos) ayant souscrit a une formation et les regrouper par formation.
J’affiche deja la liste des formations (et d’autres infos) avec un WHILE (jusqu’ici tout va bien)

$sql = 'SELECT * FROM formations ORDER BY formations_date_debut ASC' ;
$rc = @mysql_query($sql,$db_link);

while($formations_data = @mysql_fetch_array($rc)) {
    print '$formations_data['ce_que_je_veux']'};

C’est maintenant que ca coince…

Je pensais faire quelque chose comme ceci

$sql = 'SELECT * FROM formations, clients ORDER BY formations_date_debut ASC' ;
$rc = @mysql_query($sql,$db_link);

while($formations_data = @mysql_fetch_array($rc)) {
    print '
              REFERENCE : ' . $formations_data['formations_reference'] . 
              if ($formations_data['formations_reference'] == $formations_data['clients_choix']) 
              { 'NOM' . $formations_data['clients_nom'] 
              . 'PRENOM' . $formations_data['clients_prenom'] 
            . "etc";}

J’imagine bien que certains d’entre vous vont exploser de rire a la lecture de ces lignes (ca me semble un peu tordu aussi :p)
Mais c’est surtout pour vous donner l’idée générale pour réaliser ceci.

Pouvez vous m’aider siouplait ?
Merci d’avance à tous
Edité le 30/01/2008 à 17:26

Un if c’est totalement impossible,
par contre il existe le iif que tu peux mettre dans un select.

IIf(expr, truepart, falsepart)

a+
Edité le 30/01/2008 à 17:35

rooooo
il doit bien y avoir un moyen de le faire quand (pas le if mais la recup des données) ?

Joindre les deux tables
et faire une requete selection unique sur les deux tables…

pas plus simple

a+

bon ben je vais me debrouiller autrement
merci quand meme

while($formations_data = @mysql_fetch_array($rc)) {
 echo 'REFERENCE : ' . $formations_data['formations_reference'] ; 
 if ($formations_data['formations_reference'] == $formations_data['clients_choix']) 
 { echo 'NOM' . $formations_data['clients_nom'] 
 . 'PRENOM' . $formations_data['clients_prenom'] 
 . "etc";
 }
}

:neutre:

Ou encore l’opérateur ternaire:

echo ‘aa’, $x ? “baa”:“caa”;

Il manque bien entendu une jointure entre les tables (jte laisse la faire je ne connais pas les champs) mais je verrais bien un truc du genre pour ton pb :
SELECT
formation_reference,
CASE WHEN formation_reference=clients_choix THEN
‘NOM.’ || clients_nom
END as nom,
CASE WHEN formation_reference=clients_choix THEN
‘PRENOM.’ || clients_prenom
END as prenom

FROM formations left join clients (on ta jointure)
ORDER BY formations_date_debut ASC

(perso je préfère une requête qui me ramenne tous de suite les résultats que j’attend plutot que de transformer le résultat d’une requête. Tous dépend des ressources utilisées par cette dernière).
Edité le 31/01/2008 à 13:52

Note: sous mySQL, || = CONCAT. Dés fois que ça ne marche pas (et ça ne marchera pas)