2010-04-07 50 views
2

我對如何編寫這條SQL語句的邏輯有些困惑。當用戶點擊一個標籤時,比如HTML,它會顯示所有帶有HTML標籤的帖子。 (後可以有多個標籤)如何編寫此SQL語句以獲取廣告併發布? (PHP/MySQL)

我有三個表:

  1. 發帖 - > posting_id,職稱,詳細, 等
  2. 標籤 - >標籤識別,標記名
  3. postedtag - > posting_id,tagID

我想顯示帖子的所有標題和添加的日期。

global $dbc; 
    $tagID=$_GET['tagID']; //the GET is set by URL 

    //part I need help with. I need another WHERE statment to get to the posting table 
    $query = "SELECT p.title,p.date_added, t.tagname FROM posting as p, 
    postingtag as pt, tags as t WHERE t.tagID=$tagID"; 

    $data = mysqli_query($dbc, $query); 

    echo '<table>'; 
    echo '<tr><td><b>Title</b></td><td><b>Date Posted</b></td></tr>'; 
    while ($row = mysqli_fetch_array($data)) {   
    echo '<tr><td>'.$row['title'].'</td>'; 
    echo '<td>'.$row['date_added'].'</td></tr>'; 
    } 
    echo '</table>'; 
} 

我是相當新的MySQL的所以還是想弄清楚這一切:)邏輯

回答

4

這更清楚地寫使用ANSI語法:

select p.title, p.date_added, t.tagname 
from posting p 
inner join postingtag pt on p.postingID = pt.postingID 
inner join tags t on pt.tagID = t.tagID 
where t.tagID=$tagID 
+0

哇,你讓它看起來很簡單。謝謝!請問你是如何提出這個邏輯的? – ggfan 2010-04-07 19:07:49

+0

您是否基本上說要首先將GET的tagID與tags表的tagID進行匹配。然後通過說p.postingID = pt.postingID在發佈和張貼標籤表之間建立連接。 是否正確? – ggfan 2010-04-07 19:11:46

+0

@ggfan這很簡單:[貼文] ---> [postedtag] <--- [標籤],因此poststag將加入與標籤匹配的poststag中的行,然後postingtag將加入與標籤匹配的標籤行ID。您應該閱讀Google上有關SQL關於join關鍵字的教程。 :) – Erick 2010-04-07 19:13:01

0

OrbMan的解決方案是偉大的!我認爲它可以幫助您更好地瞭解如何使用表之間的原始交叉產品執行相同的查詢。如果你想保持原來的語法,你將不得不添加一些額外的條件:

SELECT p.title, p.date_added, t.tagname 
FROM 
posting as p, 
postingtag as pt, 
tags as t 
WHERE 
    p.postingID = pt.postingID AND pt.tagID = t.tagID AND t.tagID = $tagID 
+0

你仍然需要表'標籤'來獲得標記名... – RedFilter 2010-04-07 19:27:01

+0

謝謝,我忘了那部分。我從我的答案中刪除了該陳述。 – 2010-04-07 22:06:24