2012-03-08 25 views
1

我有我的自定義論壇的幾個鏈接表:categoriessub_categoriesposts鏈接表和SQL SELECT查詢

基本上,我已經能夠添加三個類別和五個子類別的人,當他們做出最新帖子。

我還可以讓人們'聽'某些類別和子類別,並讓他們在頁面的一側方便訪問欄。

我的表被設置從而(僅示出了用於便於relavent字段):

帖子:

id    INT 
category_id  VARCHAR(12) 
sub_category_id VARCHAR(35) 

類:

id  INT 
name VARCHAR(20) 

- 行業標準:

id  INT 
name VARCHAR(20) 
posts

,我店通過他們的ID設置的類別和子類的格式如下:

category_id  [2][4][8] 
sub_category_id [1][2][3][4][5] 

從而使我能夠執行在PHP下面的查詢和獲取基於崗位在類別和子類別:

SELECT * FROM posts WHERE category_id LIKE '%[{$id}]%' AND sub_category_id LIKE '%[{$id2}]%' 

我是選擇sub_categories的人「聽」到訪問欄問題...

$sql = "SELECT title, id FROM categories"; 
$query = mysql_query($sql); 
$list = array(); 
while ($row = mysql_fetch_assoc($query)){ 
    $list[$row['title']] = array(); 
    $sql = "SELECT sub_categories.title FROM sub_categories, posts WHERE (category_id LIKE '%[{$row['id']}]%') AND (????) LIMIT 0,100"; 
    $query = mysql_query($sql); 
    while($result = mysql_fetch_assoc($query)){ 
     $list[$row['title']][] = $result['title']; 
    } 
} 
print_r($list); 

顯然你可以看到我卡在哪裏(????),但在我解釋我在做什麼之前,我會解釋我正在尋找的輸出是什麼。

當我打印$list數組時,我希望它打印一個以類別作爲第一個鍵的多維數組,它們的值是在主類別中已標記的子類別數組。

我遇到的問題是在郵政表的sub_category_id字段中,請記住這些值的格式爲[1][2][3],我需要檢查該值與子類別字段id的值。

我曾嘗試以下:

"SELECT sub_categories.title FROM sub_categories, posts WHERE (category_id LIKE '%[{$row['id']}]%') AND (sub_category_id LIKE '%[sub_categories.id]%') LIMIT 0,100" 

但沒有奏效。我不知道我的查詢中是否有錯誤,或者它是否應該工作,但如果有人能告訴我該怎麼做,或者我的代碼出錯了,我將不勝感激!

注:我試圖找到哪個sub_categories出現在哪個categories基於人們在帖子中標記他們在一起。

回答

3

由於您不瞭解數據庫中的幾個概念,所以您正面臨問題...

就你而言,你希望創建名爲「多對多」的關聯。 這意味着一個類別可以在很多帖子中使用,而一個帖子可以由許多類別來表示。

要將其轉換爲「SQL」世界,您必須創建一箇中間表。

此表將存儲兩個表的標識符。

的爲例:

------------------- 
| categorisation | 
------------------- 
| post_id  | => is the link to posts 
| category_id | => is the link to categories 
------------------- 

當您創建一個新的職位,您在表中創建後的新對象。但是您也可以在表格分類中創建N條記錄。

當你想要檢索的類別應用到這個職位,你可以做這樣的查詢:

SELECT post.id, post.name 
FROM post 
INNER JOIN categorisation on (post.id = categorisation.post_id) 
INNER JOIN category ON (categorisation.category_id = category.id) 

我認爲你需要在你進步項目之前,瞭解數據庫在網絡上的一些文章; )

+0

......我簡直不敢相信。我實際上使用這個確切的解決方案來存儲用戶最喜歡的類別和子類別......出於某種原因,我完全忘記了它,因爲我專注於問題,而不是解決方案! – 2012-03-08 14:34:11

+0

還有一個提示:您可以爲類別和子類別設置一個表格,其中包含「id」,「parent_id」(NULLABLE)和「name」列。這樣,您還可以強制執行每個子類別與其父類別之間的關係。 – bfavaretto 2012-03-08 14:34:17

+0

由於我正在建設的論壇的性質,子類別可以屬於多個類別。這是漫畫,動漫和日本文化,包括粉絲小說和粉絲藝術,所以基本上,有人可能喜歡漫畫(即火影忍者)並寫下「粉絲小說」。火影忍者也是動畫片!我非常鬆散地使用術語「子類別」! – 2012-03-08 14:42:14