我有以下问题。
我有一个使用UNION ALL的MySQL查询:
def getAge(d):
salary = list(d.values())[0]['age']
return salary
#d.values() => dict_values([{'age': 30, 'salary': 600000}])
#list(d.values()) => [{'age': 30, 'salary': 600000}]
#list(d.values())[0] => {'age': 30, 'salary': 600000}
##list(d.values())[0]['age'] => 30
print(sorted(myList,key=getAge))
奇怪的是,结果的第一行没有出现。 所有其他人都没问题。 当我在PHPMyAdmin中运行相同的查询时,它正常工作......
我真的不明白为什么它没有显示出来。
提前致谢!
答案 0 :(得分:0)
这不太可能是查询的问题。但我们不能完全排除LIKE比较和字符差异的问题。我们不能排除为绑定参数提供的值的问题,
我们只是在猜测。但对观察到的行为最可能的解释是代码获取第一行,然后对其执行任何操作,然后获取下一行。我们可以使用如下代码模式重现报告的行为:
$sth->execute();
$row = $sth->fetch();
// do nothing with the row we just fetched
while( $row = $sth->fetch() ) {
// fetch another row and output it
}
这种模式可以解释为什么我们不“获得”第一行。 (我们实际得到了行,我们只是忽略它,然后获取下一行。
其他想法:
如果没有ORDER BY子句,数据库可以按任何顺序返回行。那么一次执行的“第一”行可能是后续执行中的第三行或最后一行。
如果问题是特定的行(值)未被返回,除了报告的“缺少第一行”,这可能是由于WHERE子句中的条件,查询的方式被评估。但是这个问题不仅会影响一个“第一”行。