这是我的代码:
mysql.query("INSERT INTO CategorieItems (productid, title, image, rating, price, reviews, nodes)
VALUES ?
ON DUPLICATE KEY UPDATE
title=VALUES(title), image=VALUES(image), rating=VALUES(rating), price=VALUES(price), reviews=VALUES(reviews), nodes = CONCAT(IFNULL(nodes, ''), CONCAT(' - ', nodes))",
[itemArray]);
我正在抓取一个网站,它将所有信息保存在我的mysql数据库中,现在我的查询代码检查productid是否已在我的数据库中,如果已经存在,它将更新所有字段,覆盖当前数据,但节点字段除外,因为我添加了concat函数,因此每次查询该项目时都会添加新节点。 我的问题是,如果在数据库的同一节点中两次提取项目,则会发现类似“ Node1-Node2-Node2-Node 3”的内容。因此,在此示例中,Node2出现了两次,是否可以检查Node2是否已经存在,如果存在则不再写。
答案 0 :(得分:0)
最好将设计标准化。除非如此,否则您最好的办法就是在该列中搜索匹配项:
nodes = IF(LOCATE(VALUES(nodes), nodes),
nodes,
CONCAT(IFNULL(nodes, ''), ' - ', VALUES(nodes)))
这不是很可靠,因为如果新节点是现有节点之一的子串,它也会匹配。