2015-04-03 2 views
0

J'ai une table pour stocker les catégories FAQ, puis une table pour stocker les FAQ, alors maintenant quand je dois afficher la FAQ, je parcours d'abord les catégories, puis récupère toutes les FAQ sous cette catégorie.Jointure SQL pour ce type de requête

Je veux la sortie comme,

Category 1 
FAQ1, FAQ2... 

Category 2 
FAQ3, FAQ4 

Y at-il une meilleure façon de le faire? recalculer la performance, comme en utilisant JOIN lors de l'extraction des catégories, pour récupérer les FAQ sous chaque catégorie ensemble, donc je dois exécuter seulement 1 requête.

Mon code:

<?php 

if($cache->hasItem('faq_categories')) 
{ 
    $categories = $cache->getItem('faq_categories'); 
} 
else 
{ 
    $categories = getRows(array(
     'table' => 'faq_categories', 
     'where' => array('is_active' => 1) 
    )); 

    $cache->setItem('faq_categories', $categories); 
} 

?> 



<div class="row"> 
    <div class="col-md-12"> 
     <div class="globalBox"> 
      <div class="globalBoxInside"> 
       <h2 class="mainTitle">FAQs</h2> 
       <div class="row"> 
        <div class="col-md-10 col-md-offset-1"> 
         <?php $c = 1; foreach($categories as $cat) : ?> 

         <?php 

         $faqs = getRows(array(
          'table' => 'faqs', 
          'where' => array('faq_category_id' => $cat['id']) 
         )); 

         ?> 
         <div class="faq_category"> 
          <h4 class="faq_cat_title"><?php echo $cat['title']; ?> (<?php echo $cat['questions_count']; ?>)</h4> 
          <ul class="faqs_questions_list row"> 
           <?php foreach($faqs as $faq) : ?> 
           <li class="col-md-6"><i class="fa fa-dot-circle-o"></i> <a href="<?php echo getURI('faqs'); ?>/<?php echo encryptParam('CA' . $cat['id'] . '-' .$faq['id']); ?>"><?php echo $faq['question']; ?></a></li> 
           <?php endforeach; ?> 
          </ul> 
         </div> 
         <?php endforeach; ?> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

Appréciez vos réponses, Merci.

+2

Où est votre requête que vous avez écrit pour obtenir ce fait des erreurs? Vous devriez poster votre requête s'il vous plaît. –

+0

@Testing Il n'y a pas d'erreurs, je cherche juste un meilleur moyen, voir la question mise à jour. –

Répondre

0

Vous pouvez sélectionner toutes les catégories et boucle les sélectionnant pour chaque catégorie faqs ...

pseudo-Pythonesque-code:

categories = execute('select id, name from categoryTable order by name') 
for category in categories: 
    print category.name 
    faqs = execute('select question, answer from faqTable where categoryId=' + category.id) 
    for faq in faqs: 
     print faq.question + ' - ' + faq.answer 
+0

C'est ce que je fais déjà, je suis à la recherche d'une meilleure solution, où je peux obtenir toutes les FAQ associées à chaque catégorie en une seule requête, ma question est, est-ce possible? –

+0

vous pouvez charger toutes vos données à la fois en utilisant une jointure comme 'select c.name, f.question, f.answer de faqTable f left rejoindre categoryTable c sur f.categoryId = c.id commander par c.name, f.answer 'et puis boucle ce curseur – Doc

+0

Mais de cette façon, je ne peux pas obtenir la sortie dont j'ai besoin, voir la question sur la sortie, dites-moi si je me trompe, génial si vous pouvez mettre le code ici. Merci. –