我试图实现这个question的答案。答案确实有效,但我发现我错过了为ORDER BY
表中的order
列实现qrgame_place
子句(我已经检查过列真的存在)。但我无法让它发挥作用。这就是我的问题所在。这有效:
sql = '''SELECT P.id, (TP.id IS NOT NULL) AS done
FROM qrgame_place P
LEFT OUTER JOIN qrgame_team_places TP
ON P.id = TP.place_id AND TP.team_id = %s
WHERE P.game_id = %s
'''
但这不会:
sql = '''SELECT P.id, (TP.id IS NOT NULL) AS done
FROM qrgame_place P
LEFT OUTER JOIN qrgame_team_places TP
ON P.id = TP.place_id AND TP.team_id = %s
WHERE P.game_id = %s
ORDER BY P.order ASC
'''
我试图更改ORDER BY
的位置,但它无济于事。
Django在模板中给出的错误是:
Exception Type: DatabaseError
Exception Value: near "order": syntax error
我不了解SQL语言?
答案 0 :(得分:0)
订单不在SELECT中,因此无法按顺序排序。
将其添加到输出列表
sql = '''SELECT P.id, (TP.id IS NOT NULL) AS done, P.order
FROM qrgame_place P
LEFT OUTER JOIN qrgame_team_places TP
ON P.id = TP.place_id AND TP.team_id = %s
WHERE P.game_id = %s
ORDER BY P.order ASC
'''
或者通过其他列进行排序,例如id或已完成
答案 1 :(得分:0)
我应该在(doh)之前捕获的问题是order
当然是SQL的保留关键字,即使我写了P.order
也在sqlite中触发了SYNTAX ERROR,我不知道我认为生产服务器上的MySQL会给我带来任何问题(?)。但这似乎有效:
sql = '''SELECT P.id, (TP.id IS NOT NULL) AS done, P.`order` as ord
FROM qrgame_place P
LEFT OUTER JOIN qrgame_team_places TP
ON P.id = TP.place_id AND TP.team_id = %s
WHERE P.game_id = %s
ORDER BY ord
'''
观察查询第一行order
周围的特殊字符。我可以(我相信)选择不选择P.order,只需在ORDER BY行上调用它。但是我听其他的激光器,只是把它包括在内。
MySQL和SQLite就是这样。不确定其他DB:s。
答案 2 :(得分:-1)
ORDER BY对输出进行排序。您尝试排序的字段不在输出中,因此该语句无效。