8725 sujets

Développement web côté serveur, CMS

Salut à tous,
je me suis lancé dans un projet et j'arrive au stade des jointures, mais la je suis a la rue...
voici les tables avec les champs dont j'ai besoin:
user
id|login|...|
5|bob|...

programme
id|...
15|
16|

droit
id|programmeID|userID|
1|15|5
2|16|5

logement
id|programme_ID
1|15|

l'id de l'utilisateur se trouve en session lorsqu'il s'est logué "$_SESSION Smiley id "
Dans un premier temps il faut que je fasse une requête
pour afficher les programmes auxquels l'utilisateur a les droits.

j'ai commencé avec ça mais c'est pas bon bien sur

	$requete4 ="SELECT p.id,u.id,d.userID FROM droits d 
	INNER JOIN user u ON u.id = d.userID
	INNER JOIN programme p ON p.id = d.programmeID
	WHERE d.userID ='$_SESSION[id]'";
		$ret4 = mysql_query($requete4);
		while($data4 = mysql_fetch_array($ret4)) 	
		{	
		$progid="$data4[id]";
		echo $progid;
 
		}

ensuite dans une autre page les logements auxquels l'utilisateur a les droits

un petit coup de main serait le bienvenue.
Merci
Modifié par spawns (16 Oct 2013 - 00:44)
Bonjour,
Il te manque certainement un GROUP BY p.id

Un conseil pour tester tes requêtes, fait ça directement dans phpMyadmin.
Salut Benj
et merci de te pencher sur mon bleme a nouveau
j'ai essaye ça dans le phpMyadmin

SELECT p.id,u.id,d.userID FROM droit d 
	INNER JOIN user u ON u.id = d.userID
	INNER JOIN programme p ON p.id = d.programmeID
	WHERE d.userID ='5' GROUP BY p.id


mais cela me retourne aucune ligne
de plus je ne pense pas que le GROUP BY necessaire car les programme on des id unique.

ou alors j'ai pas compris ...
Par contre comment tu fais pour récupérer les données dans la boucle
cela affiche rien
a ce niveau

		while($data4 = mysql_fetch_array($ret4)) 	
		{	
		$progid="$data4 crochet id crochet ";
		echo $progid;
 
		}

Modifié par spawns (15 Oct 2013 - 17:56)
Bonjour,
Quel est le type de ton champ userID de la table droit? varchar? int?
Si c'est un int, je ne suis pas sur qu'il faille mettre des quotes dans la clause where
---> WHERE d.userID =5 GROUP BY p.id
spawns a écrit :
de plus je ne pense pas que le GROUP BY necessaire car les programme on des id unique.

ou alors j'ai pas compris ...
En effet c'est inutile si tu n'as qu'un seul le programme par utilisateur dans ta table droit.

Tu as une jointure inutile dans ta requete, j'ai simplifier. Cela donne quoi comme résultat ?


SELECT p.id,d.userID FROM  programme p
	INNER JOIN droit d ON p.id = d.programmeID
	WHERE d.userID ='5' GROUP BY p.id
Je vais faire le mec relou (j'aime ça en fait ^^), mais du coup, as-tu le même type (varchar donc) pour ton champ id dans la table programme?
Peut-être que tu fais une jointure sur 2 types différents, et que du coup il n'aime pas?
benj a écrit :
En effet c'est inutile si tu n'as qu'un seul le programme par utilisateur dans ta table droit.

Tu as une jointure inutile dans ta requete, j'ai simplifier. Cela donne quoi comme résultat ?


SELECT p.id,d.userID FROM  programme p
	INNER JOIN droit d ON p.id = d.programmeID
	WHERE d.userID ='5' GROUP BY p.id


cette requête a l'air bonne elle me retourne bien
les deux programmes auxquels l'utilisateur a le droit dans le phpMyadmin
id userID
15 5
16 5

comment je récupéré c'est donnée dans mon while ?
je que j'ai essayé au dessus ne fonctionne pas ..
GroquikMLV a écrit :
Je vais faire le mec relou (j'aime ça en fait ^^), mais du coup, as-tu le même type (varchar donc) pour ton champ id dans la table programme?
Peut-être que tu fais une jointure sur 2 types différents, et que du coup il n'aime pas?

Il me semble que cela ne pose des problèmes qu'au niveau des performances.

GroquikMLV a écrit :
je que j'ai essayé au dessus ne fonctionne pas ..

$progid=$data4['id'];
benj a écrit :

$progid=$data4['id'];


non cela ne fonctionne pas de plus la requete qui fonctionne en phpMyadmin me met une erreur quand je la met dans le php.

SELECT p.id,d.userID FROM programme p INNER JOIN droit d ON p.id = d.programmeID WHERE d.userID ='5' GROUP BY p.id Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in ....

Modifié par spawns (15 Oct 2013 - 18:31)
c'est bon j'ai trouvé j'avais un peu oublier de connecter a la bdd. Smiley smile

Merci encore
@+
Modifié par spawns (16 Oct 2013 - 00:43)