如何通过php从mysql fetch row/array/assoc结果中的特定值检索行号?

如何通过php从mysql fetch row/array/assoc结果中的特定值检索行号?,php,mysql,sql,arrays,row,Php,Mysql,Sql,Arrays,Row,假设我在PHP中有这个sql结果($myresults=mysql\u fetch\u…assoc/row/array): 因此,我被记录为Mark($_SESSION['name']==“Mark”),我想知道值'Mark'位于哪一行(在本例中,考虑到第一行为0,第1行为) 我如何通过PHP获得它 谢谢 编辑:将其视为高分表或排行榜表,我不需要用户id,但需要用户当前所在的行…修改SQL以选择主id和其他数据: SELECT table1.id as id, table1.n

假设我在PHP中有这个sql结果($myresults=mysql\u fetch\u…assoc/row/array):

因此,我被记录为Mark($_SESSION['name']==“Mark”),我想知道值'Mark'位于哪一行(在本例中,考虑到第一行为0,第1行为)

我如何通过PHP获得它

谢谢


编辑:将其视为高分表或排行榜表,我不需要用户id,但需要用户当前所在的行…

修改SQL以选择主id和其他数据:

SELECT 
    table1.id as id,
    table1.name as name, 
    sum(table2.numbers) as numbers 
FROM 
    table2 
INNER JOIN
    table1 ON table2.fk_id = table1.id 
GROUP BY 
    name 
ORDER BY 
    numbers DESC

您应该以以下方式使用用户定义的变量:

SELECT table1.name as name, sum(table2.numbers) as numbers,
  @rank := @rank + 1 rank
FROM table2
CROSS JOIN (SELECT @rank := 0) init
JOIN table1 ON table2.fk_id = table1.id
GROUP BY name
ORDER BY numbers DESC
再想一想,小组成员可能会在计算UDV时给您带来一些麻烦。这是另一种选择,但性能不如前一种方法

SELECT *, @rank := @rank + 1 rank FROM (
    SELECT table1.name as name, sum(table2.numbers) as numbers
    FROM table2
    JOIN table1 ON table2.fk_id = table1.id
    GROUP BY name
) s
CROSS JOIN (SELECT @rank := 0) init
ORDER BY numbers DESC

无论如何,我建议用PHP直接计数。这将更加灵活和高效。

这只会带来用户id,但不完全是行索引…表2中的数字可能会有所不同,因此,今天的标记可能在第1行,但明天的标记可能在第3行,等等…把它想象成一个视频游戏高分表我想你可以在这里找到答案,谢谢,吃过饭后要把它通读一遍!虽然它看起来确实像Mosty Mostacho所回答的,但它会给我错误的答案(见我在他的答案中的评论),就像他的第一个例子一样。他的第二个例子很好用。在grub之后要测试它!谢谢顺便说一句,我如何在PHP中直接计算它?您很可能有某种循环来遍历结果,对吗?去拿你的助理和那些东西?然后在那里添加一个
$counter
变量。在循环外部的
0
中初始化它,然后在循环内部递增它。这是你的排名:)我使用while循环得到排名,但是要像“1-John-800…2-Mark-500…”那样打印表格,但是如果我需要“你的排名在”之外,带$counter增量的while循环不会在这里应用,对吗?所以我最好还是接受你提供的答案?(我现在就要测试!)对于您所谈论的问题,有不同的方法。第一个也是最简单的方法是
选择count(*)
查询,以便您提前知道总数。或者,如果您没有使用
限制
,并且您实际上得到了所有结果,那么我非常确定有一个PHP函数来计算查询获取的结果数。在使用UDV之前,我仍然会选择所有这些方法:)您答案中的第二种方法满足了我的需要…第一次尝试会给我错误的行(由于sum(),它跳过了行,好像行是为具有相同名称和不同数字的行保留的…)例如1、5、8…而不是1、2、3…谢谢!!
SELECT *, @rank := @rank + 1 rank FROM (
    SELECT table1.name as name, sum(table2.numbers) as numbers
    FROM table2
    JOIN table1 ON table2.fk_id = table1.id
    GROUP BY name
) s
CROSS JOIN (SELECT @rank := 0) init
ORDER BY numbers DESC