如何按索引选择

时间:2020-06-12 15:56:31

标签: mysql

我想重现此行为:

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,但也许有更短的方法吗?

1 个答案:

答案 0 :(得分:2)

使用ORDER BYLIMIT。您可以在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
相关问题