我有一个包含6列的MySQL表:id(主要和自动递增),纬度(double),经度(double),data_points(int),data_total(double),avg_strength(double)。
我的查询如下:
SELECT * FROM iPhoneTest WHERE latitude=$lat AND longitude=$lon LIMIT 1
$ lat和$ lon是从$ _GET定义的(但这不是问题)
我的问题出现在data_points和data_total列上,因为查询为它们返回了错误的值。以下是我处理行的代码部分:
$row = mysql_fetch_assoc($result);
$pts = $row["data_points"] + 1;
$tot = $row["data_total"] + $str;
$avg = $tot / $pts;
以下是两个不同示例的输出。正如您在两个示例中所看到的,一次迭代(我更改值并重新加载页面)返回一个不正确的值,而其余的返回正确的值(这可以通过data_points列应该只增加1的事实看出时间)。
以下是输出所有内容的行($ pts为data_points,$ avg为avg_strength,$ tot为data_total):
echo $pts . " " . $avg . " " . $tot;
这两个例子:
例如,我使用值5,7,7,10添加到data_total。
1 5 5
3 5.7 17 <--- Bad query occurs here
4 6 24
5 6.8 34
例如,我使用值5,6,7,8来添加到data_total。
1 5 5
2 5.5 11
3 6 18
5 6.6 33 <--- Bad query occurs here
不幸的是,错误查询没有模式。我已经进行了测试,其中所有查询都返回了错误的值和测试,就像上面的测试一样,除了一个查询之外的所有查询都能正常工作。我唯一注意到的是,如果我连续多次使用相同的值,那么查询每次都能正常工作。此外,如果我多次使用相同的值模式(例如在上面的示例中),我会得到相同的精确输出。
我还可以从之前的测试中确认查询本身返回的值不正确,而不是我的数学错误。
到目前为止,我已经尝试清空表中的所有值,删除表并重新构建它,并删除数据库本身并重新构建它。没有任何影响。
有没有人曾经处理类似的事情和/或知道如何解决这个问题?
谢谢!
答案 0 :(得分:2)
没有ORDER BY语句的“LIMIT 1”查询并不能保证每次都获得相同的结果。你确定一对($ lat,$ lon)夫妇只有一行吗?
检查这是否返回NO行:
select * from iPhoneTest group by latitude, longitude having count(*) > 1
答案 1 :(得分:0)
好吧,看起来好像有效。我知道我在原帖中的措词有点令人困惑,但希望将来有人可以使用它。
原来这是Safari的一个问题。当我在Chrome上运行相同的确切查询时,它会按预期工作。我仍然不知道Safari会导致它,但我可以确认这是一个浏览器问题,而不是代码或数据库问题,因为当我在Chrome上运行它时没有任何改变。