Trier à partir d'un 1ère requête
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 -
A voir également:
- Trier à partir d'un 1ère requête
- Trier un tableau excel - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Réinitialiser chromecast 1ere génération - Guide
- Logiciel pour trier les photos automatiquement - Guide
15 réponses
Hello,
je suis pas sûr d'avoir compris ta question mais le plus simple à mon avis est de le faire dans le SQL :
Voir par exemple sur TechOnTheNet.com (le premier qui sort dans Google) SQL: ORDER BY Clause
You may stop me but you can't stop us all ;-)
je suis pas sûr d'avoir compris ta question mais le plus simple à mon avis est de le faire dans le SQL :
SELECT supplier_city, supplier_state
FROM suppliers
WHERE supplier_name = 'IBM'
ORDER BY supplier_city DESC, supplier_state ASC;
Voir par exemple sur TechOnTheNet.com (le premier qui sort dans Google) SQL: ORDER BY Clause
You may stop me but you can't stop us all ;-)
MErci Ryko 1820,
Plus simple ? Je ne sais pas !
J'ai besoin du résultat de la 2è requête pour une zone liste php.
Donc il me semple que cela doit se passer dans mon formulaire, non ?
Voilà ma 1ère requete :
$requete = mysql_query("SELECT DISTINCT code_client FROM oc_aexpedier WHERE TO_DAYS(NOW()) - TO_DAYS(date_aexpedier) <= 10 ORDER BY code_client ASC") or die("Pb avec la requette ".mysql_error());
Avec ces résultats, je souhaiterais pouvoir "attaquer" une autre table (oc_clients) pour en extraire des noms.
La 1ère me donne le code_client, la 2ème le nom.
Il s'agit de les utiliser dans une zone de liste d'après la 2ème requête.
Plus simple ? Je ne sais pas !
J'ai besoin du résultat de la 2è requête pour une zone liste php.
Donc il me semple que cela doit se passer dans mon formulaire, non ?
Voilà ma 1ère requete :
$requete = mysql_query("SELECT DISTINCT code_client FROM oc_aexpedier WHERE TO_DAYS(NOW()) - TO_DAYS(date_aexpedier) <= 10 ORDER BY code_client ASC") or die("Pb avec la requette ".mysql_error());
Avec ces résultats, je souhaiterais pouvoir "attaquer" une autre table (oc_clients) pour en extraire des noms.
La 1ère me donne le code_client, la 2ème le nom.
Il s'agit de les utiliser dans une zone de liste d'après la 2ème requête.
Hello,
c'est du pur SQL, je manque un peu de pratique mais tu devrais pouvoir avoir ton résultat en une seule requête ...
Est-ce que tu connais les jointures (INNER JOIN, LEFT, RIGHT et FULL OUTER JOIN) ? C'est fait pour ça ...
Je présume que ton code_client se retrouve aussi dans la seconde table ?
You may stop me but you can't stop us all ;-)
c'est du pur SQL, je manque un peu de pratique mais tu devrais pouvoir avoir ton résultat en une seule requête ...
Est-ce que tu connais les jointures (INNER JOIN, LEFT, RIGHT et FULL OUTER JOIN) ? C'est fait pour ça ...
Je présume que ton code_client se retrouve aussi dans la seconde table ?
You may stop me but you can't stop us all ;-)
Bonjour,
Cela te donnera une requête similaire à celle ci :
Cordialement
Cela te donnera une requête similaire à celle ci :
SELECT DISTINCT C.code_client, D.nom_client
FROM oc_aexpedier C, ta_deuxieme_table D
WHERE C.code_client = D.code_client
AND C.TO_DAYS(NOW()) - C.TO_DAYS(date_aexpedier) <= 10
ORDER BY C.code_client ASC
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gign44,
J'essaie d'appréhender ton code, mais code_client et nom ne sont pas dans la table oc_aexpedier... Dans cette table je ne peux extraire que code_client.
Justement à partir de code_client de oc_aexpedier je dois sélectionner les noms dans la seconde table (oc_clients).
J'essaie d'appréhender ton code, mais code_client et nom ne sont pas dans la table oc_aexpedier... Dans cette table je ne peux extraire que code_client.
Justement à partir de code_client de oc_aexpedier je dois sélectionner les noms dans la seconde table (oc_clients).
Tu as bien code_client dans les 2 tables ?
Parce qu'à cette question cette phrase
code_client et nom ne sont pas dans la table oc_aexpedier... Dans cette table je ne peux extraire que code_client.répond oui et non ...
Si oui la jointure peut fonctionner, sinon il y a un problème car ce n'est que sur cette colonne que peut s'établir la relation entre les 2 tables (d'après ce que nous savons de tes tables).
Ça dans phpmyadmin, ça fonctionne ou pas ?
SELECT DISTINCT C.code_client, D.nom_client
FROM oc_aexpedier C, oc_clients D
WHERE C.code_client = D.code_client
AND C.TO_DAYS(NOW()) - C.TO_DAYS(date_aexpedier) <= 10
ORDER BY C.code_client ASC
Ben oui, la colonne commune c'est "code_client".
Ma première (voir plus haut) requête détermine les "code_client" de la table oc_aexpedier;
la seconde doit me permettre de terminer à partir de code_client les "noms" dans oc_clients... qui elle contient bien "code_client" et "nom".
Voilà qui devrait être plus clair, non ?
Ma première (voir plus haut) requête détermine les "code_client" de la table oc_aexpedier;
la seconde doit me permettre de terminer à partir de code_client les "noms" dans oc_clients... qui elle contient bien "code_client" et "nom".
Voilà qui devrait être plus clair, non ?
Alain42,
Ne serais-tu pas dans les parages ? Ton aide me serait précieuse...
Là ça commence à urger pour moi, lol !
Ne serais-tu pas dans les parages ? Ton aide me serait précieuse...
Là ça commence à urger pour moi, lol !
Salut,
As tu essayé les solutions proposées par ryko1820 et gign44 ?
Voici un équivalent en utilisant les jointures :
Sinon voici une autre façon de faire en utilisant une sous requête (cette solution est plus compréhensible mais moins optimisé, je te conseil d'utiliser une jointure si tu peux) :
Bonne journée
As tu essayé les solutions proposées par ryko1820 et gign44 ?
Voici un équivalent en utilisant les jointures :
SELECT D.nom
FROM oc_clients D
LEFT JOIN oc_aexpedier C ON C.code_client = D.code_client
WHERE TO_DAYS(NOW()) - TO_DAYS(C.date_aexpedier) <= 10
ORDER BY D.nom ASC
Sinon voici une autre façon de faire en utilisant une sous requête (cette solution est plus compréhensible mais moins optimisé, je te conseil d'utiliser une jointure si tu peux) :
SELECT nom
FROM oc_clients
WHERE code_client IN (
SELECT DISTINCT code_client
FROM oc_aexpedier
WHERE TO_DAYS(NOW()) - TO_DAYS(date_aexpedier) <= 10
ORDER BY code_client ASC
)
Bonne journée
@Pitet,
J'ai choisi la solution qui me paraissait la plus simple, car dans la une les "C & D" me pertubent :)..
Peux-tu me dire stp ce qui cloche ici :
"$requete = mysql_query "SELECT nom FROM oc_clients WHERE code_client IN (SELECT DISTINCT code_client FROM oc_aexpedier
WHERE TO_DAYS(NOW()) - TO_DAYS(date_aexpedier) <= 10 ORDER BY code_client ASC);
"
Merci.
J'ai choisi la solution qui me paraissait la plus simple, car dans la une les "C & D" me pertubent :)..
Peux-tu me dire stp ce qui cloche ici :
"$requete = mysql_query "SELECT nom FROM oc_clients WHERE code_client IN (SELECT DISTINCT code_client FROM oc_aexpedier
WHERE TO_DAYS(NOW()) - TO_DAYS(date_aexpedier) <= 10 ORDER BY code_client ASC);
"
Merci.
Tu as oublié les parenthèses de la fonction mysql_query et les guillemets doivent être placé autour le requête sql :
Pour les premières solutions proposées, "C" et "D" sont des alias de tables.
Pour que tu comprennes, essayons la requête suivante :
Il y a une ambiguïté sur cette requête car mysql ne sait pas quel colonne code_client il doit récupérer : celle de oc_clients ou celle de oc_aexpedier ?
Pour lever l'ambiguïté, on précise la table devant notre champ à sélectionner, par exemple on demande le code client de la table oc_clients :
Ici la requête est courte, mais pour des requêtes plus complexe, ajouter le nom de la table devant chaque champ ambigüe peut vite rendre la requête illisible.
On utilise donc un alias de table :
Ici l'alias de la table code_client est "a", tu peux lui donner le nom que tu souhaites.
Pour ton code, on peut la faire la requête avec jointure sans alias :
$requete = mysql_query("SELECT nom FROM oc_clients WHERE code_client IN (SELECT DISTINCT code_client FROM oc_aexpedier
WHERE TO_DAYS(NOW()) - TO_DAYS(date_aexpedier) <= 10 ORDER BY code_client ASC)");
Pour les premières solutions proposées, "C" et "D" sont des alias de tables.
Pour que tu comprennes, essayons la requête suivante :
SELECT code_client FROM oc_clients, oc_aexpedier
Il y a une ambiguïté sur cette requête car mysql ne sait pas quel colonne code_client il doit récupérer : celle de oc_clients ou celle de oc_aexpedier ?
Pour lever l'ambiguïté, on précise la table devant notre champ à sélectionner, par exemple on demande le code client de la table oc_clients :
SELECT oc_clients.code_client FROM oc_clients, oc_aexpedier
Ici la requête est courte, mais pour des requêtes plus complexe, ajouter le nom de la table devant chaque champ ambigüe peut vite rendre la requête illisible.
On utilise donc un alias de table :
SELECT a.code_client FROM oc_clients a, oc_aexpedier
Ici l'alias de la table code_client est "a", tu peux lui donner le nom que tu souhaites.
Pour ton code, on peut la faire la requête avec jointure sans alias :
SELECT oc_clients.nom
FROM oc_clients
LEFT JOIN oc_aexpedier ON oc_aexpedier.code_client = oc_clients.code_client
WHERE TO_DAYS(NOW()) - TO_DAYS(oc_aexpedier.date_aexpedier) <= 10
ORDER BY oc_clients.nom ASC
Merci bcp Pitet.
Je prends tout le temps nécessaire d'examiner tout cela et je reviens te dire ce qu'il en est.
Merci bcp pour tout l'explicatif.
Je prends tout le temps nécessaire d'examiner tout cela et je reviens te dire ce qu'il en est.
Merci bcp pour tout l'explicatif.
Me v'là au rapport !
Bon en fait j'ai besoin de cette requête pour alimenter une zone de liste.
J'ai cette formule là pour cette requête qui fonctionne très bien, car les deux champs sont dans la même table :
"$requette = mysql_query("SELECT code_client,nom FROM oc_clients ORDER BY code_client ASC") or die("Pb avec la requette ".mysql_error());"
Voilà le script de la zone de liste qui dans ce cas fonctionne :
"?><select name="code_client" style="width: 159px">
<option selected="selected"></option>
<?php
while ($valeur = mysql_fetch_array($requette)){
echo "<option value=\"". $valeur['code_client'] ."\" cli_name=\"". $valeur['nom'] ."\">". $valeur['code_client'] ." ". $valeur['nom'] ."</option>n";
}
?>
Je garde donc ce dernier script et je modifie la requête avec les conseilles de Pitet, mais cela ne marche pas...
Pouvez-vous me dire, svp, comment concilier les deux ? sachant que la sélection se fait sur le code client, le nom doit apparaître juste pour éviter les erreurs.
Merci mille fois.
Bon en fait j'ai besoin de cette requête pour alimenter une zone de liste.
J'ai cette formule là pour cette requête qui fonctionne très bien, car les deux champs sont dans la même table :
"$requette = mysql_query("SELECT code_client,nom FROM oc_clients ORDER BY code_client ASC") or die("Pb avec la requette ".mysql_error());"
Voilà le script de la zone de liste qui dans ce cas fonctionne :
"?><select name="code_client" style="width: 159px">
<option selected="selected"></option>
<?php
while ($valeur = mysql_fetch_array($requette)){
echo "<option value=\"". $valeur['code_client'] ."\" cli_name=\"". $valeur['nom'] ."\">". $valeur['code_client'] ." ". $valeur['nom'] ."</option>n";
}
?>
Je garde donc ce dernier script et je modifie la requête avec les conseilles de Pitet, mais cela ne marche pas...
Pouvez-vous me dire, svp, comment concilier les deux ? sachant que la sélection se fait sur le code client, le nom doit apparaître juste pour éviter les erreurs.
Merci mille fois.