Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2010, 22h40   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 2
Points : 0
Points : 0
Par défaut Requete SELECT multi-tables avec un ORDER BY

Bonsoir,

Je voudrais envoyer la requête suivante en une seule fois:

Code php :
$query = "SELECT * FROM t_membres, t_sponsors ORDER BY mem_date ASC, mem_heure ASC";

Le soucis c'est que le serveur m'affiche mes sponsors en 2 fois et que mes membres n'apparaissent pas.

Quelqu'un saurait-il me corriger mon erreur ? Merci d'avance.
Twenty4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 23h14   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Ajoute une clause GROUP BY pour grouper les sponsors ensemble.
Je te déconseille l'usage de *, si tu as des champs qui portent les mêmes noms dans les deux tables (ça arrive) tu va avoir des erreurs.

Tu réalise ta jointure avec un produit cartésien, il vaut mieux utiliser une jointure avec la clause JOIN et ON :
Code :
1
2
 
SELECT a.`name`, a.`surname`, a.`job` FROM `users` AS a JOIN `jobs` AS b ON (a.`jobs_id`=b.`id`) ORDER BY a.`name`;
Pour répondre à ta question, il me faut les desc de tes deux tables:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 02h07   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 2
Points : 0
Points : 0
GROUP BY ne sert pas juste à calculer la somme de plusieurs chiffres ?

Sinon, je le fais à l'ancienne: 2 requêtes pour 2 résultats différents.
Ca ne me parait pas très pro, Mais bon! à la guerre comme à la guerre.

Pour mes champs, il n'y a pas de problème, je les différencie par un préfixe de trois lettre portant le nom de la table.

Merci de ta part.
Twenty4 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 02h36   #4
Membre actif
 
Inscription : décembre 2006
Messages : 184
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 184
Points : 198
Points : 198
ben c'est simple si tu met * et que le résultat provient de plusieurs tables le moteur ne sais pas quel champ de quelle table prendre (enfin c'est ce que j'ai remarqué avec mysql). pour ma part je spécifie à chaque de quelle table je veux le résultat comme cela plus d'ambiguïté.
donc pour moi ta requete serai:

Code :
$query = "SELECT t_membres.*, t_sponsors.* FROM t_membres, t_sponsors ORDER BY t_membres.`mem_date` ASC, t_membres.`mem_heure` ASC"
normalement avec ca tu devrai avoir le bon résultat

c'est lourd comme écriture mais si tu créer un builder c'est easy, tu te pose plus de question c'est toujours pareil
enfin de mon point de vue
exemple:
Code :
1
2
3
4
5
6
7
8
9
10
$query_builder = new QueryBuilder();
$query_builder->appendField(Society::TABLE, '*');
$query_builder->appendField(Group::TABLE, '*');
$query_builder->appendField(Role::TABLE, '*');
$query_builder->appendField(User::TABLE, '*');
$query_builder->appendFrom(Society::TABLE);
$query_builder->appendJoinField(Group::TABLE, 'group_id', Society::TABLE, 'group_id');
$query_builder->appendJoinField(Role::TABLE, 'role_id', Society::TABLE, 'role_id');
$query_builder->appendJoinField(User::TABLE, 'user_id', Society::TABLE, 'user_id');
$query = $query_builder->createSelect();
Code :
1
2
3
4
5
6
7
8
SELECT new_society.*,new_group.*,new_role.*,phpbb_users.*
FROM new_society
LEFT JOIN new_group
ON new_group.`group_id` = new_society.`group_id`
LEFT JOIN new_role
ON new_role.`role_id` = new_society.`role_id`
LEFT JOIN phpbb_users
ON phpbb_users.`user_id` = new_society.`user_id`
Helfima est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h18.


 
 
 
 
Partenaires

Hébergement Web