我有2個表A
和B
。從表中選擇條件數據並插入另一個
表A
有五列id
,s1
,s2
,s3
,s4
。 ID
列是唯一而其他列具有值0或1。
表B具有2分空列id
和s_name
。
每次列在表A
的值是1,我想在表B
的列分別s_name
和id
插入該列的名稱(例如s4
)和id
反對。
我該如何在PHP中做到這一點? 我試圖儘可能清楚。非常感謝!
我有2個表A
和B
。從表中選擇條件數據並插入另一個
表A
有五列id
,s1
,s2
,s3
,s4
。 ID
列是唯一而其他列具有值0或1。
表B具有2分空列id
和s_name
。
每次列在表A
的值是1,我想在表B
的列分別s_name
和id
插入該列的名稱(例如s4
)和id
反對。
我該如何在PHP中做到這一點? 我試圖儘可能清楚。非常感謝!
如果總是在那裏只是一個列有值「1」,然後使用此:
INSERT INTO B (id, s_name) VALUES (select a.id, (CASE
WHEN a.s1=1 THEN 's1'
WHEN a.s2=1 THEN 's2'
WHEN a.s3=1 THEN 's3'
WHEN a.s4=1 THEN 's4'
END) as s_name from A as a
where a.s1=1 or a.s2=1 or a.s3=1 or a.s4=1)
其他使用:
INSERT INTO B (id, s_name)
SELECT id, 's1'
FROM A
WHERE s1 = 1
union all
SELECT id, 's2'
FROM A
WHERE s2 = 1
union all
SELECT id, 's3'
FROM A
WHERE s3 = 1
union all
SELECT id, 's4'
FROM A
WHERE s4 = 1
它的工作!感謝Firas Rassas。對不起,我不得不把我的時間。 – zedd
這是規範化的一種形式,通常通過對非規格化表形成多個(重複)查詢,然後使用UNION ALL
來組合這些部分來完成。事實上,您可以在單個SQL查詢中執行此操作:
insert into B (id, s_id)
select id, 1
from A
where s1 = 1
union all
select id, 2
from A
where s2 = 1
union all
select id, 3
from A
where s3 = 1
union all
select id, 4
from A
where s4 = 1
一般而言,您不需要PHP來執行此操作;它將在數據庫上運行一次。如果您試圖保留數據的A
和B
表示,則很有可能會出錯 - 除非您已證明緩存兩種表單對於性能都是必需的。請注意,將相同的數據存儲在數據庫的兩個不同位置會導致維護噩夢;如果您必須同時保留兩者,請確保只有一個表單以任何方式可編輯,並從中更新其他緩存表單。
嗯,發表您的嘗試至今。你什麼意思是「每次」?你在尋找SQL觸發器嗎? – Noy
我不知道像觸發器這樣的技術術語。我每次意味着B列中的id都可以重複。 – zedd