以下是每次将新项目添加到数据库时我必须调用的查询:
UPDATE `cas_phocagallery`,`cas_phocagallery_categories`
SET cas_phocagallery.description=concat(
cas_phocagallery_categories.title,'<br />',cas_phocagallery.description)
WHERE cas_phocagallery.catid = cas_phocagallery_categories.id;
它运行正常,但每次运行查询时都会产生重复。 我尝试添加不同但我收到错误,我不确定在这种情况下这是正确的做法。
感谢您的合作,我一直在寻找各种各样的方式而没有成功。
答案 0 :(得分:1)
如果您有唯一键,则在插入重复值时会产生错误并且是预期的行为。我认为您应该看到的是on duplicate key update,您可以在其中指定如果找到重复项该怎么做。
答案 1 :(得分:0)
每次运行查询时,都会将title
添加到当前description
。如果你连续三次运行它,你将得到
title <-- added by 3rd
title <-- added by 2nd
title <-- added by 1st
description (original)
这是你的意思吗?这正是查询的目的。也许您需要另一列来保留“base_description”,以便每次“描述”变为“标题”+ br +“base_description”
你可以尝试这样的事情,它会在95%的情况下工作,直到标题发生变化,在这种情况下你会得到历史标题。当标题包含%
符号时,它也不起作用,如果它包含_
字符,则可能会有趣。
UPDATE cas_phocagallery, cas_phocagallery_categories
SET cas_phocagallery.description=concat(
cas_phocagallery_categories.title,'<br />',cas_phocagallery.description)
WHERE cas_phocagallery.catid = cas_phocagallery_categories.id
AND NOT cas_phocagallery.description
LIKE concat(cas_phocagallery_categories.title, '%')
无法真正评论Joomla或它是如何做到的或为什么这是必要的(将标题合并到描述中)。你真正应该做的是在某个模块的某些SELECT语句中,显示CONCAT的结果,而不是将其持久化(推送/修改)到描述中。
SELECT cas_phocagallery.*, concat(cas_phocagallery_categories.title,
'<br />',
cas_phocagallery.description) as FullDescription
FROM cas_phocagallery
LEFT JOIN cas_phocagallery_categories
ON cas_phocagallery.catid = cas_phocagallery_categories.id