2017-03-07 59 views
0

我想根據表B.取得MySQL查詢更新表A基於表由乙

我想[可見:YES]顯示邏輯測試編寫一個MySQL查詢,更新表A邏輯測試只折扣> 40%的產品

折扣邏輯測試:[100 /(old_price/price)]> 40。查詢是對phpMyAdmin的(WordPress的)使用

Table A (product status) 

product_id visible 
1   yes 
2   no 
3   yes 
4   no 

Table B (product details) 

product_id meta_key meta_value 
2   price  550 
2   old_price 600 
1   price  200 
1   old_price 400 
4   price  300 
4   old_price 350 
3   price  100 
3   old_price 300 
+1

你嘗試過什麼?你幾乎在這裏寫了查詢。標記時請小心。 sql server <> mysql。 –

+1

您的預期成果是什麼。你嘗試過什麼嗎? – Hogan

+1

這可以是隻有SQL服務器或MySQL不是兩個。就是這樣。 – Hogan

回答

0

這就是答案Dhruv直升機Saxena先生先生親切地送我和完美的作品:

UPDATE product_status ps 
INNER JOIN product_details pd1 
    ON ps.product_id = pd1.product_id 
    AND pd1.meta_key = 'price' 
INNER JOIN product_details pd2 
    ON ps.product_id = pd2.product_id 
    AND pd2.meta_key = 'old_price' 

SET ps.visible = 
      CASE 
       WHEN (100/(pd2.meta_value/pd1.meta_value)) > 40.00 
        THEN 'yes' 
       ELSE 
        'no' 
      END; 

他甚至給我發了一個演示實驗:http://rextester.com/OWRQZE95139

0

這可能給你想要的東西:

select product_status.product_id, 
case when (1.00*c.meta_value)/(1.00*b.meta_value) < 0.6 then 1 else 0 end as visible 
from product_status 
inner join 
(select * 
from product_details 
where meta_key = 'old_price') b 
on product_status.product_id = b.product_id 
inner join 
(select * 
from product_details 
where meta_key = 'new_price') c 
on product_status.product_id = c.product_id 

如果是的話,用正確的UPDATE語句SELECT語句。

+0

第2行出現語法錯誤。對不起,這是用於PhpMyAdmin(WordPress)的。我沒有告訴。在我的「可見」列值爲1或0(顯示/隱藏)。爲了更好的理解,在這裏使用「是」/「否」。 – Eric

+0

@Eric第2行 - 'case when'?我編輯了這一行。它仍然錯誤?我不知道PhpMyAdmin或是什麼區別。 –

+0

Got:「您的SQL語法有錯誤;檢查與您的MariaDB服務器版本對應的手冊,以便在(1.00 * c.meta_value)/(1.00 * b.meta_value)<0.6時使用正確的語法那麼1 else 0在第2行結束爲'關閉'。謝謝 – Eric

1
update product_status 
set visible = 'yes' 
where product_id in (select product_id, (100/(max(old_price)/max(price))) as discount 
         from (select product_id, meta_value as old_price, null as price 
           from product_details 
           where meta_key = 'old_price' 
           union 
           select product_id, null, meta_value 
           from product_details 
           where meta_key = 'price') as checkit 
         where (100/(max(old_price)/max(price)) > 40 
         group by product_id)); 
+0

在PhpMyAdmin上運行此操作。必須修復它再放一個「)」這樣關閉倒數第二行:where(100 /(max(deal_price)/ max(deal_sale_price)))> 40.同樣修復最後一行:group by post_id);即使如此,出現錯誤:「無效的組功能使用」。謝謝! – Eric

+0

在我的「可見」列值是1或0(顯示/隱藏)。爲了更好的理解,在這裏使用「是」/「否」。我認爲這不是問題。 – Eric

+0

對不起 - 沒有真正運行代碼。顯然沒有注意vim中的括號匹配。很抱歉。 –