2017-08-07 55 views
1

我的任務是獲取包含關聯品牌的所有產品的列表。Mysql - 從連接表和兩個查詢中將值導入列

我已經準備好以下表格:

posts | term_relationships  | term_taxonomy | terms 
---------|------------------------|------------------|--------- 
ID  | object_id    | term_taxonomy_id | term_id 
post_type| term_taxonomy_id  | term_id   | name 
brand_id |      | taxonomies     

它們以下列方式有關:

posts.ID -> term_relationships.object_id 
term_relationships.term_taxonomy_id -> term_taxonomy.term_taxonomy_id 
term_taxonomy.term_id -> terms.term_id 

領域之間的關聯是由分配ID爲每個連接映像的腳本製作:

Query result

在這一點上,如果關聯存在,我必須開發查詢來分配posts.brand_id值terms.term_id。

篩選標準是:

term_taxonomy.taxonomies="product_brand" 
posts.post_type= "products" 

查詢邏輯可能是:

IF 
    term_taxonomy.taxonomies="product_brand" AND 
    term_taxonomy.term_taxonomy_id = term_relationships.term_taxonomy_id AND 
    term_relationships.object_id = posts.ID 
    THEN 
    INSERT INTO terms_term_id = brand_id 
ELSE 
    brands.brand_id IS NULL 

我試圖把它翻譯成MySQL,但沒有成功。你有這個建議嗎?

回答

1

您可以創建一個視圖,然後從該視圖創建SELECT,就像您可以對任何其他表格執行操作一樣(當然,即使它看起來不是這樣)。然後它就是你連接表格的物化視圖。

如果您想查看優化程序的功能,請在其前面添加EXPLAIN。然後你會看到它的表現有多好。好吧,有點OT,但一般仍然是可取的。

也許對於IF你需要一個函數?我不確定。儘管如此,我仍會推薦對複雜查詢的看法,因爲它們可以隱藏更復雜查詢背後的複雜查詢。您仍可以再次執行WHEREORDER BY乃至JOIN。但要注意性能(當涉及到高負荷網站時,每JOIN和缺少索引傷害)。

好的,OT。也許這至少會給你一些提示。

+0

所以我要嘗試一下意見。羅蘭對不起,OT代表什麼? – Alex

+0

OT = Off-Topic ...在上面的查詢中,您有兩個同名的列。您可能必須至少使用其中一個別名:'mg_term_relationships.term_taxonomy_id AS term_relation_taxonomy_id'或者可以重命名該列(如果需要)。 – Roland

+1

是的。我修好了,現在可以使用了。謝謝羅蘭! – Alex

0

我試圖創建視圖:

create view brand2product as 
    select 
     mg_term_relationships.object_id, 
     mg_term_relationships.term_taxonomy_id , 
     mg_term_taxonomy.term_id , 
     mg_term_taxonomy.term_taxonomy_id , 
     mg_termS.term_id , 
     mg_terms.name 

    from mg_term_relationships 

    join mg_term_taxonomy on mg_term_taxonomy.term_taxonomy_id = mg_term_relationships.term_taxonomy_id 
    join mg_terms on mg_terms.term_id= mg_term_taxonomy.term_id 

    where mg_term_taxonomy.taxonomy="product_brand" 

它報告了以下錯誤:

#1060 Duplicate column name "term_taxonomy_id" 

本身工作正常查詢。