Salut à tous!

J'ai un petit soucis avec des requêtes et je ne sais pas trop comment m'en sortir. Ce que je veux faire est relativement simple avec deux requêtes mais je voulais savoir si on peut le faire avec une seule.

Voici mon soucis:

Je veux faire apparaitre sur la homepage, plusieurs salles dans lesquelles se produiront des groupes de musiques. J'affiche donc les salles et les groupes associés dans des blocs séparés.

La technique que j'utilisais:
Je sélectionnais donc les salles et les affichais en les parcourant avec un foreach. Puis, à l'intérieur de ce foreach je faisais une autre requête pour trouver les groupes associés à la salle, en limitant les groupes à 5 résultats aléatoires.

Ça c'est la méthode avec deux requêtes, mais depuis, j'utilise la structure MVC et comment puis-je arriver depuis le controller avec une seule requête, c'est possible?

J'utilise FluentPDO pour mes requêtes.

J'ai essayé avec les joins et les groups mais cela ne me donne jamais le résultat souhaité.
Mes tables sont structurées de la manière suivante:

salles
    id
    name
    slug
    online
groupes
    id
    name
    slug
    online
    parent_salle

Avez-vous une idée ou un indice de la direction à prendre? Merci infiment d'avance pour votre temps!

6 réponses


beeInteractive
Auteur
Réponse acceptée

Salut!

Alors j'ai réussi, j'ai simplement placé quelques "breaks" dans les boucles. Merci pour la direction!

Salut,

une seule requête devrait suffir : http://goo.gl/GoQa5N
Dans l'exemple je me suis permis de modifier parent_salle par id_salle puisque il ne s'agit pas d'une salle parent mais bien d'une salle dans laquelle le groupe va se produire. Bref, du coté php tu dois récupérer le résultat de la requête et le parcourir avec une boucle et afficher le nom de la salle que si c'est une nouvelle salle. Un exemple vaut mieux qu'un long discours ...

<?php

// disons que $data est le tableau contenant le résultats de la requête
$c = null;
foreach( $data as $row ) {

  if( $row['Salle.id']  != $c ) {
      echo '<h2>' . $row['Salle.name'] . '</h2>'; 
  }
  echo $row['Groupe.name'].'<br>';
  $c = $row['Salle.id'];

}

Je n'ai pas testé mais en gros c'est ça :)
Bon courage.

Bonjour,

Ça fonctionne certainement avec des break, mais qestion optimisation je te conseille d'eviter les requêtes dans les boucles.
Surtout que tu peux le faire en une seule requête, ce qui est beaucoup plus optimal.

À+

Alors non je ne fais pas comme ça. J'ai fais mes deux requêtes dans le controller, et dans la vue, dans mon foreach, je fais d'abord un foreach des salles et ensuite une autre boucle pour afficher les groupes correspondant à cette salle. Mais je ne fais plus de requêtes dans les boucles.

Merci!

Bonjour,

D'accord, je disais ça à cause de ton premier message, je cite :

Je sélectionnais donc les salles et les affichais en les parcourant avec un foreach. Puis, à l'intérieur de ce foreach je faisais une autre requête pour trouver les groupes associés à la salle, en limitant les groupes à 5 résultats aléatoires.

A+

Oui c'était l'ancienne manière que j'utilisais avant de passer à la structure MVC :-)