Requete multitable clause WHERE

Résolu/Fermé
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 27 janv. 2014 à 04:03
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 28 janv. 2014 à 21:04
Bonjour,

Le script ci-dessous me permet d'afficher les infos: "code_client & nom" dans une zone de liste.

Je souhaite modifier $requete pour qu'elle affiche aussi apayer_id(table oc_aexpedier) en plus de nom et code_client (table oc_clients), toujours en tenant compte de WHERE reexpedie = '0'

reexpedie(table oc_aexpedier)

Comment faire ?

<?php
$db='****';
$cnx=mysql_connect('localhost', '****', '****') or die("Pb connexion serveur ".mysql_error()); // connexion à la base
$db_sel=mysql_select_db($db) or die("Erreur de selection ".mysql_error());
$requete = mysql_query("SELECT nom, code_client FROM oc_clients WHERE code_client IN (SELECT code_client FROM oc_aexpedier
WHERE reexpedie = '0' ORDER BY code_client ASC)");

?>



<td class="auto-style4">code client *</td>
<td><select name="code_client" style="width: 159px">

<option selected="selected"></option>

<?php
while ($valeur = mysql_fetch_array($requete)){
echo "<option value=\"". $valeur['code_client'] ."\" cli_name=\"". $valeur['nom'] ."\">". $valeur['code_client'] ."   ". $valeur['nom'] ."</option>n";
}
?>


MErci d'avance.

3 réponses

Salut, il faut utilise OR(OU) pour ajouter une autre clause.
Ne confondez pas SQL et PHP, sachez différencier les 2, le mieux étant de tester directement vos requêtes sur le serveur de la bases de données(d'où l'intérêt de pas confondre PHP et SQL qui sont mus par 2 serveurs fonctionnant ensemble mais 2 serveurs différents); pour tester soit par la console ou en utilisant le panneau de configuration(comme quand vous avez fait vos tables) d votre BDD(compris dans easyphp et wamp).

Voici un cours sur ce langage simple: SQL et le point précis que vous demandez:

http://sql.sh/cours/where/and-or

OU = indique une condition(clause WHERE 'OU' une autre) et AND indique que plusieurs conditions doivent être remplies(CLAUSE WHERE 'ET').

En français la logique du langage est identique:
Si vous avez lu et avez comprit(les 2 conditions doivent être vraies)

Si vous modifiez votre fichier php ou essayer dans la console(l'un ou l'autre)
0
détails supplémentaire si vous interrogez plusieurs tables il faut les indiquer dans la requête:
WHERE (où est en français) indique sur quelles table(s) vous faites les requêtes.

SELECT * FROM table 'bidule', 'machin' WHERE 0=0;
Ici ceci est traduit par: Afficher tout (SELECT *) des tables(FROM) bidule et machin('bidule', 'machin') où la condition suivante est vraie(WHERE). zéro étant toujours égal à 0 la condition sera toujours vraie et le résultat de la requête est simplement tout le contenu des tables bidule et machin.


Bref vous avez besoin de potasser le langage SQL qui est simple(voire simpliste; SQL est un langage de bas niveau, très peu permissif, très peu d'instructions mais en contrepartie rapide et facile à exécuter et comprendre) en commençant par la base: l'écriture d'une requête simple puis compléter en utilisant les alias, jointures de tables, sous-requêtes et faisant le tour de la petite dizaine d'instructions logiques du langage.
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 27/01/2014 à 04:49
Vous excuserez mon ignorance, mais je ne perçois pas pourquoi vous me parlez des clauses.
Qu'il y ait une ou dix tables la condition ne change pas.
Mon problème est comment dire à la même requête que je souhaite aussi afficher un champs supplémentaire d'une autre table.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
27 janv. 2014 à 09:51
Il a juste voulu faire étalage de son savoir (d'ailleurs plutôt restreint en ce qui concerne SQL).

Il faut que code_client soit une clé primaire dans la table àc_client et clé étrangère dans la table oc_aexpedier.

$requete = mysql_query("SELECT c.nom, c.code_client, a.apayer_id FROM oc_clients As c, oc_aexpedier As a WHERE c.code_client = a.code_client AND
a.reexpedie = '0' ORDER BY code_client ASC)");
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 27/01/2014 à 21:13
Merci beaucoup Polux31

Je teste cela, et je dis ce qu'il en est.
C le cas pour la clé primaire dans oc_clients et clé étrangère dans oc_aexpedier.
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
27 janv. 2014 à 23:38
Çà marche au poil !

Merci bcp Polux31, juste une chose, je n'ai pas réussi à placer DISTINCT pour supprimer les doublons du code_client. Une idée ?
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
27 janv. 2014 à 04:32
Je te remercie.

Ici la clause ne change pas.
Je souhaite qu'un champs supplémentaire d'une autre table apparaisse dans le résultat de la requête.
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
28 janv. 2014 à 21:04
Polux31 m'a donné la bonne solution, mais je n'arrive à placer DISTINCT pour supprimer les doublons du code_client. Une idée ? Merci.
0