2016-02-02 53 views
0

我在我需要在我的MYSQL數據庫中執行的操作中有點迷路。我搜查了很多,但仍然找不到答案。MySQL觸發器 - 修剪並創建2條記錄

基本上我有一個是插在wp_postmeta表中這樣記錄:(?用觸發器可能)

+---------+---------+-------------+--------------------------------------+ 
| meta_id | post_id | meta_key |    meta_value    | 
+---------+---------+-------------+--------------------------------------+ 
|  558 |  252 | coordinates | 39.74953310000001,-8.807682999999997 | 
+---------+---------+-------------+--------------------------------------+ 

我想實現在同一個表被拆分該記錄成兩個新記錄一旦記錄被插入,這樣我就可以得到:

+---------+---------+-----------------+--------------------+ 
| meta_id | post_id | meta_key  |  meta_value  | 
+---------+---------+-----------------+--------------------+ 
|  559 |  252 | _et_listing_lat | 39.74953310000001 | 
|  560 |  252 | _et_listing_lng | -8.807682999999997 | 
+---------+---------+-----------------+--------------------+ 

所以座標有緯度和經度之間進行分裂時,POST_ID是一樣的,meta_id自動遞增和meta_key稱爲。我知道我可能不得不使用支持表來做到這一點嗎?我一直在嘗試不同的解決方案,但仍然沒有運氣......任何幫助?謝謝

+0

您是否想對現有記錄執行此操作?或者只是尋找新的記錄。 –

+0

只爲新的記錄。插入記錄後,必須按這種方式進行拆分。理想情況下,插入的記錄也應該刪除,在兩個新的登記後。謝謝 – Takazeki

回答

0

你可以在MySQL中使用After Insert Trigger來完成你的工作。

試試這個:

DELIMITER // 

CREATE TRIGGER wp_postmeta_afr_ins 
AFTER INSERT ON wp_postmeta FOR EACH ROW 
BEGIN 

    insert into wp_postmeta (post_id,meta_key,meta_value) 
    select NEW.post_id, 
      '_et_listing_lat ' as meta_key, 
      substring_index(NEW.meta_value,',',1) 
    from wp_postmeta 
    union all 
    select NEW.post_id, 
      '_et_listing_lng ' as meta_key, 
      substring_index(NEW.meta_value,',',-1) 
    from wp_postmeta ; 

    delete from wp_postmeta where meta_id =NEW.meta_id ; 

END // 
DELIMITER ; 
+0

感謝您的幫助!問題是我得到這個錯誤:#1442 - 無法更新存儲的函數/觸發器中的表'wp_postmeta',因爲它已被調用此存儲的函數/觸發器的語句使用。而且似乎新記錄不再傳遞給wp_postmeta。我讀了一個地方,你不能直接用MySQL中的觸發器更新同一個表。也許存儲過程+觸發器是解決方案? – Takazeki

0

好了,所以我設法正是我想要的輸出,但使用臨時表和稍稍改變由code_monk代碼。以下觸發器是wp_postmeta並插入到wp_postmeta_support:

BEGIN 

insert into wp_postmeta_support (post_id,meta_key,meta_value) 
select NEW.post_id, 
     '_et_listing_lat ' as meta_key, 
     substring_index(NEW.meta_value,',',1) 
from wp_postmeta WHERE (SELECT meta_key FROM wp_postmeta WHERE post_id = NEW.post_id) = "location" 
union 
select NEW.post_id, 
     '_et_listing_lng ' as meta_key, 
     substring_index(NEW.meta_value,',',-1) 
from wp_postmeta WHERE (SELECT meta_key FROM wp_postmeta WHERE post_id = NEW.post_id) = "location"; 

END 

如何轉移記錄回到原始表(wp_postmeta)?這讓我瘋狂,因爲我總是得到觸發錯誤!我甚至嘗試過使用事件將記錄帶回到觸發表,但仍然沒有好處...

+0

我找到了解決方案。我每秒鐘運行一個事件,在同一個表中插入和拆分記錄。沒問題。謝謝 – Takazeki