Mysql隐形进程?

时间:2012-08-08 01:08:30

标签: php mysql sql ajax xmlhttprequest

这是一张表

Id   Date   Name     vendor
1   | 123  |  jungle     |  qwe
2   | 43   |  jungle     |  qwe
3   | 678  |  jungle     |  ewq
4   | 678  |  jungle     |  ewq
5   | 678  |  jungle     |  ewq
6   | 678  |  jungle     |  hgjghj

此脚本从表中删除名称列中具有重复值且具有相同供应商值的行。只留下一个独特的行。单击前端的按钮后,脚本也会通过XHR ajax调用$.post()执行。

$sql = DELETE x
FROM $table x
JOIN 
 ( SELECT vendors
        , email
        , MIN(lead_id) min_lead_id 
     FROM $table
    WHERE vendors = $vendor
    GROUP BY vendors
           , email
 ) y 
ON y.vendors = x.vendors 
AND y.email = x.email
AND y.min_lead_id <> x.lead_id;

mysql_query($sql, $conn);
echo json_encode($foo);

和结果

Id   Date   Name     vendor
1   | 123  |  jungle     |  qwe
3   | 678  |  jungle     |  ewq
6   | 678  |  jungle     |  hgjghj

现在有一张50k的表,它会在两秒内结束。或者更确切地说,它通过echo json_encode($result);返回ajax调用。如今,在这一点上我认为这个过程是完整的,但进入我的mysql表,并一次又一次地刷新后,我发现,MySQL的仍在运行,因为在表中报告行总数不断改变,因为如果仍在运行的查询。

如何让echo json_encode($result);等到数据库完成更新?或者有更好的方法来解决这个问题吗?感谢。

$("#complete_dedupe").live("click", function(e) {
    e.preventDefault();
    table_name = $('#IMEXp_import-selectTable-select option:selected').val();
    $.post("dedupevendor.php", {"table": table_name}, function(data) {
        count_dedupe = 0;
        count_dedupe = data;
        $("#dupe_vendor").append(count_dedupe);
        $("#tr2").fadeIn("slow");
        vendor = $("#vendor_hidden").val();
        $("#edit_par4").append(vendor);
    }, "json")
});

通过不断刷新phpmyadmin,带圆圈的数字会在不到一分钟的时间内发生变化。这只发生在我运行我的重复数据删除脚本之后,并且在脚本已经从ajax调用返回之后。图片如下:

enter image description here

2 个答案:

答案 0 :(得分:2)

你没有看到phpMyAdmin发生变化的原因是Innodb没有保持行的运行次数,例如MyISAM

不要查看表格摘要,而是运行;当你运行你的重复数据删除脚本时它应该改变。

SELECT COUNT(*) FROM auto;

答案 1 :(得分:-1)

试试这个:

if(mysql_query($sql, $conn))
{
  echo json_encode($foo);
}

这样,只有在mysql_query()返回一个值后才会将数据返回给调用的ajax脚本,这应该只在函数完成处理后才会发生