2010-10-10 62 views
1

我有一個有趣的查詢,我想知道是否有人可以幫忙?mysql複雜更新和替換

基本上,我有三個表,標題,屬性和ATTRIBUTE_VALUE

標題包含了像「由{用戶}在{類別}創建於{日期}」然後在屬性表,我有模板列表包含大括號內包含參數定義的行。

然後在attribute_value表中,我有值。

我遇到的問題是,查詢似乎沒有存儲每行的替換,直到查詢完成,這意味着行只接收最後一次更新,不完整。

update Title inner join Attribute_Value on Attribute_Value.GenericID = Title.CollectibleID and Attribute_Value.GenericType = 'collectible' inner join Attribute on Attribute.AttributeID = Attribute_Value.AttributeID set Title.Title = replace(Title.Title, concat('{', Attribute.Name, '}'), Attribute_Value.Value) 

所以基本上,它會取代{}日期正確,但是當它去取代{用戶},{DATE}不是替代價值,但仍然{}日期與{}類相同。但是當它完成時,我想知道如何使用值更新Title列,同時保持以前替換的值嗎?

乾杯

GAV株系

+0

您需要爲模板中的每個值加入一次Attribute_value - 在此情況下爲3次。每個加入都會覆蓋一個值。 – Martin 2010-10-10 21:08:34

+0

@Martin,屬性名稱/值和標題都是完全通用的。那幾乎不可能處理。 – Gavin 2010-10-10 21:34:51

+0

同意。我認爲最簡單的解決方案是在應用程序中進行替換:檢索模板,提取屬性列表,然後檢索屬性,最後執行替換。 – Martin 2010-10-11 06:20:54

回答

0

如果屬性列表是靜態的,我可能會去與子查詢和嵌套的SQL REPLACE()。否則,編寫自己的SQL函數遍歷所有可能的屬性名稱並進行替換。

+0

不幸的是,標題和屬性名稱/值是完全通用的。謝謝您的好意。) – Gavin 2010-10-10 21:33:50

1

您可以編寫一個stored procedure,它使用cursor更新Title中的屬性。

+0

可能,儘管這會採取永遠跑:(看來該行僅更新整個查詢完成時,而不是在該行完成 – Gavin 2010-10-10 21:32:50

+0

我不知道你的意思,我總是去爲了正確的代碼,然後擔心性能。 – grossvogel 2010-10-10 21:58:40