2011-04-29 10 views
0

Je construis une application PHP5 et j'ai besoin de lister les projets et toutes les informations connexes à leur sujet. Pour cela, j'ai trois tables, nommées: kc_projects, kc_project_members et kc_users. . J'ai ID dans chacun d'eux, et une colonne dans chaque ligne de kc_project_members reliant l'utilisateur respectif au projet, il est inscrit dansFaites-le sur une requête: Quelle est la meilleure façon?

Pour l'instant, je cette requête:

SELECT * FROM kc_projects AS p 
INNER JOIN kc_project_members AS pm 
ON pm.PROJECT_ID = p.ID 
INNER JOIN kc_users AS u 
ON u.ID = pm.USER_ID 

Mais ça ne marche pas comme je le voudrais, parce que ça récupère les résultats que je veux, mais pas comme je le veux. Il crée un tableau et un autre tableau, et dans ce tableau j'ai un autre tableau contenant les résultats de la requête. Cela me crée aussi un résultat dupliqué pour chaque utilisateur, ce qui signifie que si je n'ai qu'un seul utilisateur enregistré dans ce projet, cela me renvoie juste un projet. Mais si j'en ai plus, ça me revient autant que les utilisateurs enregistrés, et que les tableaux ont toujours les mêmes informations de projet. Je voudrais qu'il retourne juste un projet, et à l'intérieur un tableau contenant les utilisateurs.

Y a-t-il un moyen de le faire, de la bonne façon?

Merci,
Scorch

+0

On ne sait pas ce que la sortie que vous voulez. Soit vous pouvez le faire dans un seul jeu de résultats qui dupliquera potentiellement l'utilisateur et les informations du projet, soit vous pouvez diviser les données en exécutant plusieurs requêtes et en associant les résultats dans votre code php. Lequel veux-tu? – Thomas

+0

Une requête ne créera pas de tableau pour vous, c'est du côté PHP. Donc, si vous n'êtes pas satisfait de la mise en page du tableau, c'est parce que votre code l'a mal construit. –

+0

pour le "problème de tableau" vérifier la lib ou la fonction que vous utilisez pour exécuter le résultat et récupérer le résultat, vérifiez dans la documentation le mode "récupérer" la plupart des bibliothèques peuvent gérer plusieurs modes d'extraction, associatifs, combinés, etc. – regilero

Répondre

0

Je suppose que par des réseaux que vous voulez dire des ensembles de résultats ...

Oui - il est possible, mais probablement pas exactement comme vous l'avez imaginé, parce que tous les les ensembles de résultats doivent avoir le même nombre de colonnes, ce qui ne serait pas possible au cas où vous auriez à dire ... 2 membres du projet pour le projet avec ID 1 et 5 membres du projet pour le projet avec l'ID 7.

Vous devrez spécifier exactement quelles colonnes vous voulez être retourné - SELECT * ne fera pas le trick (et c'est une mauvaise chose à faire de toute façon, surtout si une bonne performance est requise). Et aussi, les identifiants des utilisateurs, les noms d'utilisateur ou toutes les colonnes que vous devez obtenir pour les utilisateurs référencés par projet devront être concaténés dans une chaîne, que vous devrez par la suite analyser avec PHP.

Voici un exemple:

SELECT p.ID, p.PROJECT_NAME, GROUP_CONCAT(u.USERNAME SEPARATOR ',') AS PROJECT_MEMBERS 
FROM kc_projects p 
    JOIN kc_project_members pm ON p.ID=pm.PROJECT_ID 
    JOIN kc_users u ON pm.USER_ID=u.ID 
GROUP BY p.ID; 
+0

J'ai suivi votre conseil, mais au lieu d'une seule requête, j'utilise deux requêtes. Dans le premier cas, je reçois les projets et les ID des membres dans une chaîne, et dans la seconde, j'obtiens les membres dont j'ai besoin dans le projet listé. Je n'ai donc pas besoin de créer une requête par projet, et cela fonctionne comme je le veux. :) –

Questions connexes