首先,我试图谷歌这个,但只提出了这样的答案: MySQL - Get row number on select
我需要的是“通过speciefic id获得行位置”。
通过上面链接的示例,我尝试添加“WHERE CLAUSE”,但是,“rank”的结果总是为1.
所以,如果我的表有自动增量id字段,并且不是特定顺序(例如,在id 1来3之后,而不是2,因为id 2已从数据库中删除),我怎样才能得到for的位置例如id 4?
有没有可能获得的方法,我想要的是什么?
答案 0 :(得分:4)
对于基于1的位置:
SELECT COUNT(id) AS pos FROM table WHERE id <= current_id
对于从0开始,更改&lt; = for&lt;
答案 1 :(得分:3)
假设,按“位置”,您的意思是按id
排序:
SELECT COUNT(*) FROM my_table WHERE id <= 4
答案 2 :(得分:1)
看看这些SQL Fiddle。
CREATE TABLE league_girl (position int, username varchar(10), score int);
INSERT INTO league_girl VALUES (1, 'a', 10);
INSERT INTO league_girl VALUES (2, 'b', 25);
INSERT INTO league_girl VALUES (7, 'c', 75);
INSERT INTO league_girl VALUES (10, 'd', 25);
INSERT INTO league_girl VALUES (16, 'e', 55);
INSERT INTO league_girl VALUES (17, 'f', 80);
INSERT INTO league_girl VALUES (27, 'g', 15);
此查询为我record
提供position = 17
及其6th
Row Number
Select * from (SELECT l.position,
l.username,
l.score,
@curRow := @curRow + 1 AS row_number
FROM league_girl l
JOIN (SELECT @curRow := 0) r) as k
WHERE k.position = 17;
答案 3 :(得分:0)
如果你的意思是
,MySQL没有找到row number
的任何功能
答案 4 :(得分:0)
我需要一些非常相似但更通用的东西。我有几个order子句的select查询,我需要在结果集中找到特定id的位置。想象一下过滤的产品列表和过滤器集,您需要的是找到产品所在的页面。
基于Henrique Barcelos解决方案:
原始查询:
SELECT * FROM mytable
WHERE something = TRUE
ORDER BY
price ASC,
discount DESC,
catagory ASC
查找特定ID的行查询:
SELECT COUNT(id) FROM mytable
WHERE something = TRUE
AND (
price < 'myprice'
OR (price = myprice AND discount > 'mydiscount')
OR (price = myprice AND discount = 'mydiscount' AND category < 'mycategory')
)
您必须获得获得第一个位置所需对象的myprice
,mydiscount
和mycategory
。
您可以使用小于(&lt;)升序,大于(&gt;)降序。
此查询可以通过算法轻松生成。
它比具有变量@curRow
的解决方案更具资源效率,因为它不需要获取行并且只能从索引计算结果。
答案 5 :(得分:0)
SET @curRow = 0;
SELECT *, @curRow := @curRow + 1 row FROM `table`
如果要将实际订单存储为表中的值,可以添加新列,例如行,然后
set @curRow = 0;
update `table` set row = @curRow := @curRow + 1;
或者你可以更新主键如果你想清除间隙(如果它是保存以更改id,例如,如果它只是单独的测试表)