我正在寻找一种方法来排序我的mysqliresult后获取特定项目的位置。我有一张这样的桌子:
id_______|_Name_____________|_ParentID
58 | Carl | 15
55 | Clark | 15
12 | David | 4
23 | Sophie | 15
45 | Amanda | 15
我只对带有ParentID 15的行感兴趣,我想按名称对它们进行排序。然后我想看一个特定的项目,比如id 55(Clark)并知道它放在哪个行号上。我想生成一个这样的表:
id_______|_Name_____________|_ParentID
45 | Amanda | 15
58 | Carl | 15
55 | Clark | 15
23 | Sophie | 15
当我对Clark感兴趣时,我想获得数字3,因为他的行是这个新表中的第三行。
这有可能与mysqli有关吗?如果它不能在一个语句中完成,我必须循环遍历所有选定的项目,并且每个项目的计数都会增加,直到找到正确的项目,但我真的想避免这个,因为要循环的项目数量通过快速增加。
答案 0 :(得分:2)
试试这个:
SELECT t.*,
(SELECT COUNT(*) FROM YourTable s
WHERE t.parent_id = s.parent_id
and t.name <= s.name) as Cnt
FROM YourTable t
输出:
id_______|_Name_____________|_ParentID__|_Cnt
58 | Carl | 15 | 2
55 | Clark | 15 | 3
12 | David | 4 | 1
23 | Sophie | 15 | 4
45 | Amanda | 15 | 1
现在Cnt
列包含行位置,因此要获取其中任何一个位置:
SELECT tt.cnt
FROM (...above query here...) tt
WHERE tt.name = ? --optional
AND tt.parent_id = ? --optional
答案 1 :(得分:0)
您可以通过执行以下操作获取Clark
行:
select count(*)
from t
where t.ParentId = 15 and
t.Name <= 'Clark';
索引t(Name, ParentId)
将加快效果。
答案 2 :(得分:0)
在mysql中,您可以使用User-Defined Variables
SELECT T.*, if(@a, @a:=@a+1, @a:=1) as rownum
FROM T
WHERE ParentID=15
ORDER BY Name
答案 3 :(得分:-1)
尝试
jQuery('.parent').animate({
scrollLeft: jQuery('.child').offset().left
},1000);
jQuery('.parent').animate({
scrollLeft: jQuery('.child').position().left
},1000);
jQuery('.parent').animate({
scrollLeft: jQuery('.child').width() * 2
},0);