【发布时间】:2014-09-09 19:47:18
【问题描述】:
更新:已回答问题,请参阅Magento Catalog Search Query Constraint Error 了解我的后续问题。
在 Magento 目录中进行某些搜索时,我遇到了外键约束错误。这是导致该问题的查询:
INSERT INTO `catalogsearch_result`
(
SELECT
'0',
`s`.`product_id`,
-(
( MATCH(`s`.`data_index`) AGAINST ('ip335') ) +
( 5 * ( MATCH(`s`.`data_index_1`) AGAINST('ip335') ) ) +
( 3 * ( MATCH(`s`.`data_index_2`) AGAINST('ip335') ) ) +
( 2 * ( MATCH(`s`.`data_index_3`) AGAINST ('ip335') ) )
)
FROM `mikkelrickycatalogsearch_fulltext` AS `s`
INNER JOIN `catalog_product_entity` AS `e`
ON `e`.`entity_id`=`s`.`product_id`
WHERE
(
(`s`.`data_index` LIKE '%ip335%')
)
AND `s`.`store_id`='2'
)
ON DUPLICATE
KEY UPDATE `relevance` = VALUES(`relevance`);
我们使用的是 MikkelRicky_CatalogSearch 扩展,但即使是核心搜索代码也会产生类似的查询 (INSERT/ON DUPLICATE KEY)。
我正在尝试理解 SQL 中的这种查询类型。我只是不明白 INSERT 语句如何与 DUPLICATE KEY UPDATE 一起使用。谁能提供一些实际的解释?谢谢!
【问题讨论】:
-
如果 MySQL 发现
catalogsearch_result的键query_id和product_id重复,而不是 MySQL 引擎更新值relevance = VALUES('relevance');而不是插入 -
太棒了,这很有道理。谢谢@P0ZiTR0N。请将其发布为答案,以便我给予您信任。现在,我可以就约束错误提出下一个问题(请参阅我的编辑)。