2013-04-11 36 views
0

我有一張表,其中包含或多或少的博客文章。的結構如下:邏輯列表類別和子類別PHP

  1. ID INT PRIMARY KEY AUTO_INCREMENT
  2. 用戶VARCHAR
  3. 標題VARCHAR
  4. 類別VARCHAR
  5. 部VARCHAR
  6. post_body TEXT
  7. POST_DATE DATETIME

部分字段基本上是一個子類別。 我有段第二個表:

  1. ID INT PRIMARY KEY AUTO_INCREMENT
  2. SECTION_NAME VARCHAR
  3. 類別VARCHAR

我一直在努力做的就是在頁面上創建一個列表這將是這樣的結構:

科學(這是類別)

地質(此第一部分)

TITLE1

TITLE2

TITLE3

生物學(第二部分)

TITLE1

標題2

TITLE3

等等等等與科學類的所有部分

當用戶單擊以查看科學類物品時,它們登陸此頁面。

我已經嘗試過很多事情來完成這個,但沒有成功。獲取用於顯示的部分名字很容易,但做基於第一個查詢檢索到的部分全部文章標題查詢是在哪裏我被困所以這裏是我的代碼到這一點:

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

您的帖子表中的「部分」是否也是部分名稱或部分ID?我假設部分名稱,因爲它是一個varchar? –

+0

@PhillSparks ...是的,他們都存儲相同的值 – codeguerrilla

回答

1

我會建議您擴大了查詢的範圍,以便爲每個標題添加標題,然後僅循環顯示標題(指示您何時更改了部分)。

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

你也可以創建一個節的名稱爲重點的陣列和標題爲成員:

$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"); 
現在,你必須要顯示的標題的列表,循環在他們

一個nester數組。當然,它可能會變得更加複雜,但我希望能夠讓你明白從哪裏開始。

+0

非常感謝@Paul Hulett。我已經在章節表中標題的名稱,所以我實際上只需要查詢...您的邏輯來簡單地檢查部分不是空的正是我所需要的。有時候解決方案比你想象的要簡單得多。 – codeguerrilla