我试图在满足条件时从表中删除记录。条件是:如果表1中有一条记录与表2中的记录不匹配,则从表1中删除该记录。
$survey_mapping =$wpdb->get_results( $wpdb->prepare("SELECT surveyid from oc_partner_x_survey"));
foreach($survey_mapping as $row){
$dup_survey2 =absint($wpdb->get_var( $wpdb->prepare("SELECT surveyls_survey_id FROM oc_surveys_languagesettings WHERE surveyls_survey_id =%d",$row)));
if (absint($dup_survey2) > 0) {
$error_msg1[] = $dup_survey2;
} else {
$error_msg2[0] = $row;
$error_msg2[1] = $dup_survey;
$error_msg2[2] = $survey_mapping;
$wpdb->delete(\'oc_partner_x_survey\',
array(\'surveyid\' => absint($row)),array(\'%d\'));
}
}
这是从控制台发出的。您可以看到变量$dup\\U survey是如何为空的。
error_msg1":null,"error_msg2":[{"surveyid":"748254"},0,[{"surveyid":"955287"},{"surveyid":"748254"}]]}
下面是表1:
下面是表2:
我被卡住了。任何帮助或见解都将不胜感激!谢谢大家<大卫(David)
最合适的回答,由SO网友:nmr 整理而成
get_results()
默认情况下,将每个数据库行作为对象返回,因此$survey_mapping
是一个对象数组。因此,您应该更换$row
具有$row->surveyid
在第二个查询中:
$dup_survey2 = absint( $wpdb->get_var(
$wpdb->prepare("SELECT surveyls_survey_id FROM oc_surveys_languagesettings WHERE surveyls_survey_id = %d", $row->surveyid)
));
并且在
$wpdb->delete()
:
array(\'surveyid\' => absint($row->surveyid))
顺便说一下,您可以使用一个SQL查询从
oc_partner_x_survey
在中没有匹配项
oc_surveys_languagesettings
:
DELETE oc_partner_x_survey
FROM oc_partner_x_survey
LEFT JOIN oc_surveys_languagesettings ON oc_surveys_languagesettings.surveyls_survey_id = oc_partner_x_survey.surveyid
WHERE
oc_surveys_languagesettings.surveyls_survey_id IS NULL