Bonsoir à tous,
Désolé pour le titre qui n'est pas très explicite, mais je n'ai pas trouvé mieux...
Mon problème vient à mon avis d'une méconnaissance de la structure de base.
Je vais essayer de simplifier au mieux mon problème:
J'ai 2 tables:
work et users
work (id, id_author, id_worker ...)
users (id, name ...)
ma table work comporte 2 clefs vers la table users:
l'utilisateur qui fait la demande de travail : id_author --> id (users)
l'utilisateur qui réalise le travail : id_worker --> id (users)
Pour récupérer l'ensemble des informations dont j'ai besoin je fait une requète du type:
Je parcours le résultat obtenu avec php et j'affiche un tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT * FROM works W, users U, users V WHERE W.id_author = U.id AND W.id_worker = V.id
Je peux facilement filtrer sur le name author en ajoutant un AND U.name like '%Jean%' ou sur celui du worker avec AND V.name like '%Bernard%'.
Mais si je veux ordonner l'astuce ne fonctionne plus et je ne peux pas classer par ordre alphabétique les workers ...
Pour les plus courageux, voici la requête exacte faisant appel à toutes les tables:
--> Est-ce que je passe à coté d'une astuce, ou est-ce que je dois envisager un changement radical de la construction de ma base pour pouvoir différencier facilement le name du worker avec le name du author?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT * FROM main M, works_order W, def D, users U, users V WHERE M.id_work = W.id AND W.id_def = D.id * AND M.id_author = U.id AND M.id_worker = V.id ORDER BY 'V.name' DESC LIMIT 0 , 40
Je tiens à préciser que le * est volontaire, car je récupère plus de 80 champs avec la requète, et c'est php qui va gérer la recherche des informations à afficher.
D'avance merci à ceux qui ont tenus jusqu'au bout, et grand merci à ceux qui pourront m'aider...
Partager