我有以下查询,但它会删除所有行“info”,而不是仅删除重复的行。我做错了什么?
$db->setQuery("DELETE t1 FROM #__rsform_submission_values t1
INNER JOIN #__rsform_submission_values t2
WHERE t1.SubmissionValueId > t2.SubmissionValueId AND t1.FieldName = 'info' AND t1.SubmissionId = '".$subId."'");
$db->query();
$query = $db->getQuery(true);
答案 0 :(得分:0)
假设此查询以某种方式工作,您告诉它删除任何行(名称为' info'以及某些提交值id),为此它可以找到另一行SubmissionValueId
低了。
您需要考虑一对行重复的含义。例如。如果他们有相同的FieldName
。建议:添加AND t2.FieldName = 'info'
,如果这就是你的意思。
关于这个查询似乎有更多要改进,但我会从它的本质开始。
答案 1 :(得分:0)
您似乎错过了JOIN
条件。我在猜测:
DELETE rsv
FROM #__rsform_submission_values rsv INNER JOIN
#__rsform_submission_values rsv2
ON rsv2.SubmissionId = rsv.SubmissionId AND
rsv2.FieldName = rsv.FieldName
WHERE rsv.SubmissionValueId > rsv2.SubmissionValueId AND
rsv.FieldName = 'info' AND rs1.SubmissionId = ?;
您应该学习使用参数化查询,而不是使用查询字符串。这就是我用?
替换id值的原因。