我的主要問題是如何按名稱搜索給定類別的 id,讓我解釋一下,所以,在我的資料庫中,我有一個名為 product_category 的表,其中存盤了 5 個級別的類別。讓我們舉個例子:
| ID | 姓名 | parent_id |
|---|---|---|
| 1 | 一個 | |
| 2 | 乙 | 1 |
| 3 | C | 2 |
| 4 | D | |
| 5 | 一個 | 4 |
| 6 | 乙 | 5 |
| 7 | C | 6 |
所以從這張表中,讓我們采取這兩個類別:
- A/B/C
- D/A/B/C
在我的表中,類別名稱是多余的,但沒有相同的 id,現在假設我想搜索這個類別的 id (A/B/C),在我的情況下是否可能?知道有兩個名為 C 的類別具有不同的 ids ,與 B 和 A 相同。
我正在使用 python 和 odoo ,但我沒有找到解決這個問題的方法,尤其是在我的資料庫中有多余的名稱。
uj5u.com熱心網友回復:
您可以使用為每個類別構建完整路徑的遞回查詢,然后在最終選擇中過濾該完整路徑:
with recursive tree as (
select id, name, parent_id, name as full_path
from category
where parent_id is null
union all
select c.id, c.name, c.parent_id, concat(p.full_path, '/', c.name) as full_path
from category c
join tree p on p.id = c.parent_id
)
select id, name, parent_id
from tree
where full_path = 'A/B/C'
uj5u.com熱心網友回復:
complete_name欄位是存盤的計算欄位,因此可以在搜索域中使用。
示例(odoo 15):
self.env['product.category'].search([('complete_name', '=', 'A / B / C')])
示例(odoo 8):
self.env['product.category'].search([('name', '=', 'C'), ('parent_id.name', '=', 'B'), ('parent_id.parent_id.name', '=', 'A'), ('parent_id.parent_id.parent_id', '=', False)])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483427.html
標籤:Python sql PostgreSQL 奥多
