Optimisation requête SQL

Par kurdtkobane, il y a 5 ans


Base de données MySQL

Bonjour,

Je vous explique:

La question est comment puis-je optimiser ces fonctions?
Est-il optimal de faire la requête à partir de l'utilisateur genre users.id_service -> services.name?
Si oui comment fait-on? (ouais je sais j'abuse, mais je ne comprends pas bien comment fonctionne les requêtes entre table liées)

Merci par avance de votre aide.

3 réponses

Curvata, il y a 5 ans

Pourquoi tu fais 3 fonctions ? Pas besoin de préparer tes requêtes.

public function search(string $table) :array { $req = $this->bdd->query("SELECT * FROM ".$table." ORDER BY name ASC"); return $req->fetchAll(); } $searchservice = new Search(); $dataservice = $searchservice->search('services'); $datafonction = $searchservice->search('fonctions'); $datarole = $searchservice->search('roles');

Quand tu voudras récupérer tes utilisateurs, il faudra utiliser les jointures pour récupérer les données de tes 3 tables.

Arnaud Lemercier, il y a 5 ans

Salut,

Dans ton cas, tu dois récupérer 3 données qui n'ont rien à voir : Une liste des rôles, une liste des services et les informations de l'utilisateur.
Tu peux donc faire 3 requêtes pour cela.

Idéalement, si tu fais trop de requêtes SQL, tu peux mettre en cache le résultat pour éviter de le faire à chaque chargement.

Pour ce qui est de la requête préparée, personnellement je la laisserais car ça garantie qu'il n'y aura pas de faille de sécurité liée à l'injection d'une variable mal contrôlé à l'intérieur de la requête.

Enfin, si tu utilises PDO, je te conseile de faire un fetchAll(PDO::FETCH_COLUMN); pour récupérer directement un tableau indexé par colonne.

kurdtkobane, il y a 5 ans

Bonjour,

Merci à vous deux. J'avais pas pensé au PDO::FETCH .
Et effectivement tant que je maîtrise pas ce que je fais je sécurise un max mon code en préparant mes requête.