2013-04-11 5 views
0

J'ai une table qui contient ce qui sont plus ou moins des articles de blog. La structure est la suivante:logique pour les catégories d'inscription et sous-catégories PHP

  1. id INT PRIMARY KEY AUTO_INCREMENT
  2. utilisateur VARCHAR
  3. titre VARCHAR
  4. catégorie VARCHAR
  5. section VARCHAR
  6. TEXTE post_body
  7. POST_DATE DATETIME

Le champ de section est essentiellement une sous-catégorie. J'ai une deuxième table pour les sections:

  1. id INT PRIMARY KEY AUTO_INCREMENT
  2. section_name VARCHAR
  3. catégorie VARCHAR

Ce que j'ai essayé de faire est de créer une liste sur une page qui serait structuré quelque chose comme ceci:

Science (c'est la catégorie)

géologie (ce la première section)

title1

title2

title3

etc

Biology (deuxième section)

titre1

Title2

title3

etc

Etc etc pour toutes les sections avec la catégorie de la science

Lorsqu'un utilisateur clique pour afficher les articles dans la la science catégorie qu'ils atterrir sur cette page.

J'ai essayé beaucoup de choses pour accomplir ceci mais n'ai eu aucun succès. Obtenir les noms de section pour l'affichage est facile, mais faire une requête pour tous les titres de l'article sur la base des sections extraites de la première requête est où je suis coincé alors voici mon code jusqu'à ce point:

if(isset($_GET['cat'])){ 
    $cat = preg_replace('#[^a-z0-9_]#i','',$_GET['cat']); 
    $cat = str_replace('_',' ',$_GET['cat']); 
    $stmt = $db->prepare("SELECT section_name FROM sections WHERE category=:cat GROUP BY section_name"); 
    $stmt->bindValue(':cat',$cat,PDO::PARAM_STR); 
    try{ 
     $stmt->execute(); 
    } 
    catch(PDOException $e){ 
     echo $e->getMessage(); 
     $db = null; 
     exit(); 
    } 
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 
     $sectionName = $row[section_name]; 
    } 
} 
+0

Est-ce que la "section" de votre tableau des posts contient également le nom de la section ou l'identifiant de la section? Je suppose que le nom de la section est un varchar? –

+0

@PhillSparks ... Oui, ils stockent tous les deux les mêmes valeurs – codeguerrilla

Répondre

1

je suggère que vous élargissiez la portée de votre requête pour étiqueter chaque titre avec sa section, puis bouclez seulement les titres (en indiquant quand vous changez de section).

$stmt = $db->prepare("SELECT section_name FROM sections t1, title FROM posts t2 WHERE t1.category=:cat AND t1.section_name = t2.section GROUP BY section_name"); 

maintenant que vous avez la liste des titres que vous souhaitez afficher, en boucle sur eux:

$currentSection = null; 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 
    $sectionName = $row[section_name]; 
    if ($sectionName != $currentSection) { 
    echo "<h2>".$sectionName."</h2>"; 
    $currentSection = $sectionName; 
    } 
    echo "<p>".$row['title']."</p>"; 
} 

Vous pouvez aussi créer un tableau avec le nom de la section comme la clé et les titres en tant que membres de un tableau de nester. Cela peut, bien sûr, devenir beaucoup plus compliqué, mais j'espère que cela vous donnera une bonne idée de l'endroit où commencer.

+0

Merci beaucoup @Paul Hulett. J'avais déjà les noms des titres dans la table des sections, donc j'avais seulement besoin de faire une requête pour ça ... Votre logique de simplement vérifier que la section n'est pas nulle était exactement ce dont j'avais besoin. Parfois, la solution est beaucoup plus simple que vous ne le pensez. – codeguerrilla

Questions connexes