Comment améliorer ma requête RIGH JOIN
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 :D, et je vais auss vérifier que compte est actif... ). Pour le moment, je me consacre à l'extraction des terrains authorisés.
Code:
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
Citation:
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
Citation:
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