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

时间:2014-12-09 22:05:28

标签: php mysql

我一直有这个问题,我的积分没有以正确的顺序保存。 在我的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]。我无法弄清楚如何让他们以正确的顺序写作,但根据我的研究,我认为问题可能是由于竞争条件造成的。任何有关这个问题的帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

您的loadJSON函数似乎异步工作。

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

答案 1 :(得分:0)

加载网页时,会加载HTML,然后加载图片。你几乎没有什么想法,也绝对不能保证从服务器请求,处理和到达这些图像的顺序(甚至,如果)。

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

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