gpt4 book ai didi

php - 如何在 SQL 结果中搜索特定值?

转载 作者:行者123 更新时间:2023-11-29 00:21:23 24 4
gpt4 key购买 nike

我有一个具有以下结构和信息的 SQL 数据库:

idClub   Pts   GD
1 3 2
2 4 0
3 5 -1
4 0 -3
5 9 5
6 1 2
7 3 1
8 0 -2
9 6 0
10 7 5

如果如果做:

$result = $mysqli->query("SELECT * FROM table ORDER BY Pts Desc, GD Desc");

它将提供这个:

idClub   Pts   GD
5 9 5 //Row Number = 1
10 7 5 //Row Number = 2
9 6 0 //Row Number = 3
3 5 -1 //Row Number = 4
2 4 0 //Row Number = 5
1 3 2 //Row Number = 6
7 3 1 //Row Number = 7
6 1 2 //Row Number = 8
8 0 -2 //Row Number = 9
4 0 -3 //Row Number = 10

每个 idClub 都有自己的个人资料页面 - profile.php?Id=X - 我需要在其中显示带有 id 的俱乐部以及表格上方和下方的 2 个球队。

有什么方法可以知道给定值在 $result 中的行号(位置)?例如profile.php?id=3 会是4;对于 profile.php?Id=1 它将是 6,依此类推。

例如,对于 profile.php?Id=3,我需要一个提供以下内容的 $result:

idClub   Pts   GD
10 7 5
9 6 0
3 5 -1
2 4 0
1 3 2

提前致谢。

最佳答案

首先,接受你现在的问题,

SELECT
*
FROM
atable
ORDER BY
Pts DESC,
GD DESC

并使用涉及变量分配的众所周知的技术为其添加行编号:

SELECT
atable.*,
@row := @row + 1 AS row
FROM
atable
CROSS JOIN
(SELECT @row := 0) AS p
ORDER BY
Pts DESC,
GD DESC

这将根据指定的顺序为您的行分配排名。现在,如果我们知道与指定的 idClub 关联的行号,我们只需将上述查询用作派生表并根据条件过滤其结果集

WHERE
row BETWEEN @idXrow - 2 AND @idXrow + 2

而且我们可以找出@idXrow 值。为此,我们可以向子查询添加一个变量赋值:

@idXrow := CASE idClub WHEN 3 THEN @row ELSE @idXrow END

其中 3 是指定的 idClub 值 – 在您的最终查询中,它可能需要替换为参数引用。无论如何,complete query完成这项工作看起来像这样:

SELECT
row,
idClub,
Pts,
GD
FROM
(
SELECT
atable.*,
@row := @row + 1 AS row,
@idXrow := CASE idClub WHEN 3 THEN @row ELSE @idXrow END
FROM
atable
CROSS JOIN
(SELECT @row := 0) AS p
ORDER BY
Pts DESC,
GD DESC
) AS s
WHERE
row BETWEEN @idXrow - 2 AND @idXrow + 2
;

关于php - 如何在 SQL 结果中搜索特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20926197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com