我想重现此行为:
sql = 'SELECT id FROM photos where index = 1' ---> I getting: 8
sql = 'SELECT id FROM photos where index = 2' ---> I getting: 9
sql = 'SELECT id FROM photos where index = -1' ---> I getting: 12
+----+-----------+-------------------------------+
| id | user_id | photo
+----+-----------+-------------------------------+
| 1 | 1773 | s8uBdMI4AHBDgAEAQADAgADYwADCX0AAd
| 8 | 1773 | s8uBdMI4AHBDgAEAQADAgADYwADCX0AAh
| 9 | 1773 | w46YZqV89G6DwAEAQADAgADYwADWxgHAA
| 10 | 1773 | rVTM9pwXA8ABAEAAwIAA2MAA3MmAwABGg
| 11 | 1773 | KunArfCDwAEAQADAgADYwAD6CYBAAEaBA
| 12 | 1773 | fmupLIswQ4ABAEAAwIAA2MAA3RnAAIaBA
+----+-----------+-------------------------------+
DDL:
cursor.execute("""CREATE TABLE IF NOT EXISTS photos(
id INTEGER AUTO_INCREMENT,
user_id INTEGER,
photo VARCHAR(255),
KEY (id),
KEY (photo),
PRIMARY KEY (user_id, photo),
FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE)""")
问题在于,有时id
不能保持顺序(如此处)。可能的解决方案-每次都使用order by
,但也许有更短的方法吗?
答案 0 :(得分:2)
使用ORDER BY
和LIMIT
。您可以在LIMIT
子句中指定索引和行数,因此请使用rowcount = 1
在该索引处仅获得一行。
对于负索引,请使用降序。取反索引并减去1,因为索引从0
开始。
SELECT photo FROM photos
ORDER BY id
LIMIT 1, 1; -- index 1
SELECT photo FROM photos
ORDER BY id
LIMIT 2, 1; -- index 2
SELECT photo FROM photos
ORDER BY id DESC
LIMIT 0, 1; -- index -1