Trier à partir d'un 1ère requête
Résolu/Fermé
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
-
Modifié par maxireussite le 15/09/2013 à 06:41
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 4 oct. 2013 à 23:46
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 4 oct. 2013 à 23:46
A voir également:
- Trier à partir d'un 1ère requête
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Excel trier par ordre croissant chiffre - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Combien y a-t-il de bateaux dans la zone de 1500 pixels de large et 500 pixels de haut à partir du coin supérieur gauche de cette image ? - Forum Graphisme
- Avatar facebook à partir de photo - Guide
15 réponses
ryko1820
Messages postés
1677
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
15 août 2021
276
Modifié par ryko1820 le 15/09/2013 à 12:44
Modifié par ryko1820 le 15/09/2013 à 12:44
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 ;-)
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
15 sept. 2013 à 23:50
15 sept. 2013 à 23:50
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.
ryko1820
Messages postés
1677
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
15 août 2021
276
Modifié par ryko1820 le 16/09/2013 à 08:29
Modifié par ryko1820 le 16/09/2013 à 08:29
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 ;-)
gign44
Messages postés
124
Date d'inscription
dimanche 27 janvier 2008
Statut
Membre
Dernière intervention
22 octobre 2013
5
Modifié par gign44 le 16/09/2013 à 09:30
Modifié par gign44 le 16/09/2013 à 09:30
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
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
17 sept. 2013 à 05:35
17 sept. 2013 à 05:35
Merci aux deux derniers post, je vais essayer, je vous dirais ce que ça donne.
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 30/09/2013 à 02:59
Modifié par maxireussite le 30/09/2013 à 02:59
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).
ryko1820
Messages postés
1677
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
15 août 2021
276
Modifié par ryko1820 le 30/09/2013 à 07:17
Modifié par ryko1820 le 30/09/2013 à 07:17
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
gign44
Messages postés
124
Date d'inscription
dimanche 27 janvier 2008
Statut
Membre
Dernière intervention
22 octobre 2013
5
30 sept. 2013 à 09:03
30 sept. 2013 à 09:03
Il te faut obligatoirement une colonne commune entre tes 2 tables, si ce n'est pas le cas, crée une colonne FK code_client dans ta deuxieme table, ce sera le plus simple
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 30/09/2013 à 19:01
Modifié par maxireussite le 30/09/2013 à 19:01
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 ?
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
1 oct. 2013 à 05:52
1 oct. 2013 à 05:52
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 !
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
1 oct. 2013 à 11:24
1 oct. 2013 à 11:24
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
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
1 oct. 2013 à 13:18
1 oct. 2013 à 13:18
Merci les amis.
Je regarde cela et je reviens vers vous.
Je regarde cela et je reviens vers vous.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
4 oct. 2013 à 02:58
4 oct. 2013 à 02:58
@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.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
4 oct. 2013 à 09:50
4 oct. 2013 à 09:50
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
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
4 oct. 2013 à 13:07
4 oct. 2013 à 13:07
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.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
4 oct. 2013 à 23:40
4 oct. 2013 à 23:40
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.
maxireussite
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
4 oct. 2013 à 23:46
4 oct. 2013 à 23:46
Oup's ! Je n'ai rien dit ! En fait cela marche au poil..
J'ai une erreur dans la recopie de "requete" et il faut rajouter code_client dans :
"...SELECT nom FROM oc_clients WHERE code_client IN ...
J'ai une erreur dans la recopie de "requete" et il faut rajouter code_client dans :
"...SELECT nom FROM oc_clients WHERE code_client IN ...