iT邦幫忙

0

PHP 怎麼樣 UPDATE 三個合併起來的資料表 的某欄位值

有什麼方法UPDATE 三個合併起來的資料表的某欄位值

我用的資料庫是MYSQL這是我的資料表
第一次問排版亂請見諒,謝謝。
訂單明細details
o_id (訂單明細序列號) z_id (訂單編號) o_o(處理狀態)
1 1 2
2 1 2
3 2 1
會員member
m_id(會員編號) m_level(會員權限)
1 member
2 member
訂單orders
z_id(訂單編號) m_id(會員編號)
1 1
2 1
合併結果
m_id(會員編號) m_level(會員權限) o_o(處理狀態)
1 member 2
1 member 2
2 member 1
程式碼的部分
SELECT member.m_id, member.m_level, details.o_o
      FROM  (member INNER JOIN orders ON member.m_id=orders.m_id) 
   INNER JOIN details ON orders.z_id=details.z_id
請問我要如何把當details.o_o=1時member.m_level改成block
小魚 iT邦高手 1 級 ‧ 2019-01-13 19:20:58 檢舉
UPDATE只能UPDATE一個表, 想辦法抓到那個表的資料.

1 個回答

3
暐翰
iT邦大師 2 級 ‧ 2019-01-13 22:09:51
最佳解答

MySQL版本

使用PHP猜測你的DB是MySQL,可以使用update join方式

update 
	member 
    INNER JOIN orders  ON  member.m_id=orders.m_id
	INNER JOIN details ON orders.z_id=details.z_id
set member.m_level = 'block'
where details.o_o = 1 /*假如有其他篩選條件可以放這裡*/;

線上測試連結: DB Fiddle - SQL Database Playground


SQL Server 版本

這個給參考,之前不知道DB版本,所以寫了sql-server版本
使用cte + update方式,先將想要更新的資料select好,接著做想要的更新。
假如想要改成指定會員的,一樣把條件加在where裡面。

with cte as (
	SELECT member.m_id,  member.m_level,  details.o_o
	FROM  (member INNER JOIN  orders  ON  member.m_id=orders.m_id) 
	INNER JOIN details ON orders.z_id=details.z_id
	where o_o = 1
)
update cte set m_level = 'block';

2019-01-13.22.08.02-image.png

謝謝暐翰的解答,我自己上網看到例子就試,試了蠻久了,結果看到你的解答才想到不同的DB有不同的寫法。

暐翰 iT邦大師 2 級 ‧ 2019-01-13 22:38:15 檢舉

我要發表回答

立即登入回答