Bonjour à tous et tout bon dimanche !!

Je reviens sur des requêtes avec jointure.

J'arrive à faire ce que je veux faire mais je me demande si, c'est juste ou si on peut faire mieux.

J'ai trois tables

users
id | id_user | user_email | user_mdp
===
1 | 1 | guest@m.ch | 123
2 | 2 | titi@m.ch |321
3 | 3 |lulu|m.ch |lulu

fields
id | id_field | field_name
===
1 | 1 | nord
2 | 2 | sud
3| 3 | ouest
4 | 4 | est

L'utilisateur guest ne peux accéder au terrai nord, sud et est

J'ai créé une table de liaison n:m
users_has_fields
id | users_id_user | fields_id_field
===
1 | 1 | 1
2 | 1 | 2
3 | 1 | 4

Maintenant, j'ai fait une API qui extraire les terrains qui sont attribué à guest (je n'ai pas encore travaillé le contrôle du mot de passe, si jamais , et je vais auss vérifier que compte est actif... ). Pour le moment, je me consacre à l'extraction des terrains authorisés.

Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$sql_select = "SELECT u.id_user, u.user_email, u.user_mdp, u.roles_id_role, u.user_active, f.fields_id_field, f.users_id_user FROM users As u
 
			RIGHT JOIN users_has_fields AS f ON u.id_user = f.users_id_user
 
			WHERE u.user_email = '$email'
			ORDER BY f.fields_id_field ASC";
		$sql_result = $connect->query($sql_select);
 
 
		$fields = array();
		if($sql_result->num_rows > 1)
		{
 
			while($row = $sql_result->fetch_assoc())
			{
				print_r($row);
 
			}
 
	    	$code = 1;
	    	$message ="Account YES";
 
		}
		else
		{
			$code = 0;
			$message = '['.$code.'] E-mail ou mot de passe invalide';
		}

Le print_r dans le while me donne ceci

Array
(
[id_user] => 3
[user_email] => guest@m.ch
[user_mdp] => toto
[roles_id_role] => 3
[user_active] => 1
[fields_id_field] => 1
[users_id_user] => 3
)
Array
(
[id_user] => 3
[user_email] => guest@m.ch
[user_mdp] => toto
[roles_id_role] => 3
[user_active] => 1
[fields_id_field] => 2
[users_id_user] => 3
)
Array
(
[id_user] => 3
[user_email] => guest@m.ch
[user_mdp] => toto
[roles_id_role] => 3
[user_active] => 1
[fields_id_field] => 4
[users_id_user] => 3
)
Ce qui à première vue, c'est OK

Mais j'aurais préféré que le print_r me retourn

Array
(
[id_user] => 3
[user_email] => guest@m.ch
[user_mdp] => toto
[roles_id_role] => 3
[user_active] => 1
[fields_id_field] => array(1,2,4)
[users_id_user] => 3
)
Je pourrais construire un $user = array() dans mon while pour arriver à le QUOTE précédent, mais je me pose la question si on ne peut pas faire cela de manière plus simple, d'ou ma question1 .

Aussi j'ai commencé par un RIGHT JOIN. Je suis étonné que LEFT JOIN ou INNER JOIN me donne le même résultat!

Merci pour volumières