控制 MySQL 数据库条目的保存顺序


controlling the order in which mysql database entries are saved

我一直遇到这个问题,我的积分没有以正确的顺序保存。在我的javascript中,我有以下代码:

for(var i = 0; i < numOfLines; i++)
{       
    //save first point with newLine set to true
    loadJSON(currentServer + "?action=setAnnotCoord" + "&pic=" + CurrentImage
    +'&pid=' + pid + '&xCoord=' + coordArray[i][0] + '&newLine=true &drawingColor=' + lineColor[i]);
    //rest of the points with newLine set to false
    for(var j = 1; j < coordArray[i].length; j++)
    {
        loadJSON(currentServer + "?action=setAnnotCoord" + "&pic=" + CurrentImage
        +'&pid=' + pid + '&coord=' + coordArray[i][j] + '&newLine=false &drawingColor=' + lineColor[i]);
    }           
}

loadJSON(( 方法基本上将我带到我的 php 脚本,其中包含作为 GET 请求发送的传递参数。php 代码如下所示:

if($action == 'setAnnotCoord' && $userIDSet && $pidSet && $picSet)
{
    $sql = "INSERT INTO cbmarker.annot_test (userid, project_id, image, date, coords, newLine, color)
            VALUES (" . $userID . "," . $pid . ",'". $pic . "', NOW()," . $coord . "," . $newLine . ",'" . $drawingColor . "')";
    $result = mysql_query($sql);
}

这些条目确实可以正确保存到数据库中,但有时它们会切换输入顺序,从而破坏我预期的坐标数据。数据假定在 x 和 y 坐标之间交替。假设我传入坐标 1、5、10 和 12 的条目。我希望我的坐标对是 [1, 5] 和 [10, 12]。但是,当条目写入数据库时,它们的写入顺序示例是 1、5、12、10,而不是我最初的意图,因此我的坐标对现在变为 [1, 5] 和 [12, 10]。我不知道如何让他们以正确的顺序书写,但根据我的研究,我认为问题可能是由于竞争条件造成的。关于这个问题的任何帮助将不胜感激。谢谢。

看起来您的loadJSON函数确实异步工作。

更改它,以便它将 GET/POST 请求排队,以便顺序保持正确,您的问题得到解决。

当您加载网页时,它会加载 HTML,然后加载图像。您几乎不知道,绝对不能保证这些图像将以什么顺序被请求,处理并从服务器到达(甚至如果(。

这就是异步通信的本质。除非指定排序顺序,否则您也不能保证将从数据库返回哪些顺序行。

我建议将它们发送到一个块中,或者将它们在数组中的位置作为行的一部分包含在数组中并使用它来对结果进行排序。