簡體   English   中英

如何在MySQL 5中從一個類別和子類別中選擇所有文章

[英]How to select all articles from one category and sub-category In MySQL 5

三個表保存文章信息:

類別表:

id, lft, rgt, title

lft:左值

rgt:正確的值

lft和rgt的值是嵌套集,例如:

           root 
          (0,15)
          /    \
         /      \
       cat1    cat2
      (1,6)   (7, 14) 
       /|      / | \
      / |     /  |  \
     /  |    /   |   \
 cat3 cat4  cat5 cat6 cat7
(2,3) (4,5) (8,9)(10,11)(12,13)

文章表:

id, title

article_category_map表:

article_id, category_id

如何從MySQL的一個類別和子類別中選擇所有文章?

我預計:

1,單擊目錄2,顯示目錄2和目錄5以及目錄6和目錄7的所有項目。

2,單擊目錄5時,僅顯示目錄5的所有文章。

3,單擊根目錄,顯示所有類別的所有文章(包括cat1,cat2,cat3,cat4,cat5,cat6,cat7 ...)。

我猜'lft'和'rgt'代表二叉樹的 “ left”和“ right”屬性。

假設$category_id$category_id的ID, Db::fetch方法從數據庫中獲取單行, Db::fetchAll方法獲取與SQL查詢匹配的所有行。

然后,您可以獲取類別的“左”和“右”,然后從類別及其子類別中獲取文章。

if (! $cat = Db::fetch("SELECT lft, rgt
  FROM categories WHERE id = $category_id"))
{
  // handle error
}

$articles = Db::fetchAll("SELECT a.* FROM article a
  JOIN article_category_map m ON m.article_id = a.id
  JOIN categories c ON c.id = m.category_id
  WHERE c.id BETWEEN ${cat['lft']} AND {$cat['rgt']}");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM