2013-04-11 2 views
0

У меня есть таблица, в которой хранятся более или менее статьи блога. Структура выглядит следующим образом:логика для перечисления категорий и подкатегорий PHP

  1. ID INT PRIMARY KEY AUTO_INCREMENT
  2. пользователя УАКСНАК
  3. название УАКСНАК
  4. категория УАКСНАК
  5. секция УАКСНАК
  6. post_body ТЕКСТ
  7. POST_DATE DATETIME

Поле раздела в основном является подкатегорией. У меня есть вторая таблица для разделов:

  1. ID INT PRIMARY KEY AUTO_INCREMENT
  2. section_name VARCHAR
  3. категории VARCHAR

То, что я пытаюсь сделать, это создать список на странице что будет структурировано примерно так:

Наука (это категория)

геологии (это первая секция)

title1

title2

title3

т.д.

биологии (вторая секция)

title1

title2

title3

и т.д.

Etc и т.д. для всех разделов с категорией науки

Когда пользователь нажимает кнопку, чтобы просмотреть статьи в науки категории они землю на этой странице.

Я пробовал множество вещей для достижения этого, но не имел успеха. Получение названия разделов для отображения легко, но сделать запрос для всех заголовков статей на основе разделов, извлеченных из первого запроса, где я застрял, так вот мой код до этого момента:

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

Является ли «раздел» в вашей таблице сообщений также названием раздела или идентификатором раздела? Я предполагаю название раздела, так как это varchar? –

+0

@PhillSparks ... Да, они оба сохраняют одинаковые значения – codeguerrilla

ответ

1

Я хотел бы предложить что вы расширяете сферу своего запроса, чтобы пометить каждый заголовок своим разделом, а затем перебрать только заголовки (указывая, когда вы измените раздел).

$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"); 

теперь у вас есть список заголовков, которые Вы хотите отобразить, петля над ними:

$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>"; 
} 

Вы также можете создать массив с именем раздела в качестве ключа и названия в качестве членов массив гнезд. Конечно, это может быть намного сложнее, но я надеюсь, что это даст вам хорошее представление о том, с чего начать.

+0

Большое спасибо @Paul Hulett. У меня уже были названия названий в таблице разделов, поэтому на самом деле мне просто нужно было запросить это ... Ваша логика просто проверить, что раздел не является нулевым, это именно то, что мне нужно. Иногда решение намного проще, чем вы думаете. – codeguerrilla

Смежные вопросы