Requete multitable clause WHERE
Résolu
maxireussite
Messages postés
372
Date d'inscription
Statut
Membre
Dernière intervention
-
maxireussite Messages postés 372 Date d'inscription Statut Membre Dernière intervention -
maxireussite Messages postés 372 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Where to download bulluduck42793
- Qwerty to azerty - Guide
- Microsoft store download - Guide
- Télécharger music mp3 gratuit download pc - Télécharger - Conversion & Extraction
- Canva download - Télécharger - Divers Photo & Graphisme
- Word 2013 free download - Télécharger - Traitement de texte
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)
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)
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.
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.
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)");
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.
Merci bcp Polux31, juste une chose, je n'ai pas réussi à placer DISTINCT pour supprimer les doublons du code_client. Une idée ?