![](/img/trans.png)
[英]MySQL: Select Category and (optional) Sub-Category for Projects in One Statement
[英]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.