我有以下代码,它首先从数据库中检索每个唯一样式,然后搜索products表以查找与每个样式关联的术语,并使用styleid和productid更新stylerefs表:
$query = "Select id,style,terms from su_styles";
if ($results = $sudb->query($query)) {
while($result = $results->fetch_array(MYSQLI_ASSOC)) {
$id=$result['id'];
$style=$result['style'];
$terms=$result['terms'];
$query= "INSERT IGNORE INTO su_stylerefs (mykey,id)
SELECT mykey,$id FROM su_pref where (match(name) against ('$terms' in Boolean Mode))
ON DUPLICATE KEY UPDATE id=$id, mykey = su_pref.mykey";
$sudb->query($query);
无论如何,我可以将此查询重写为一个,而不是循环查看第一个查询的结果吗?我有10个其他类似的查询需要每天运行,第一个查询中的一些表可能有100个记录,这意味着数百个与数据库的连接,这需要一段时间。
提前谢谢
答案 0 :(得分:0)
我会首先获取所有这些行以及match()大小写,然后进行更新:
INSERT INTO su_stylerefs (mykey, id)
VALUES ($mykey[0], $id[0]), ($mykey[1] $id[1]), ...
ON DUPLICATE KEY UPDATE id=$id, mykey = su_pref.mykey
第二个解决方案:
INSERT IGNORE INTO su_stylerefs (mykey,id)
SELECT sp.mykey, ss.id
FROM su_styles AS ss
INNER JOIN su_pref AS sp
ON match(sp.name) against (ss.terms in Boolean Mode)
ON DUPLICATE KEY UPDATE id = VALUES(id), mykey = VALUES(mykey)
这可能是一个更好的解决方案。