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
Ce qui à première vue, c'est OKArray
(
[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
)
Mais j'aurais préféré que le print_r me retourn
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 .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
)
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
Partager