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

标签 php mysql sql mysqli

我有一个具有以下结构和信息的 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/

相关文章:

php - 重命名 PHP 不断写入的文件是否安全?

php - Netbeans 中的 javascript 验证问题

php - 将脚本从 PHP mysql_insert_id header 、位置方法转换为 PHP session 方法

php - 使用 CodeIgniter 从 MySQL 数据库检索图像,而不使用上传库。是否可以?

php - 从插件将数据添加到 WordPress 上的 MySQL 表时出错

sql - 带有 SELECT 顺序的 Postgres INSERT INTO

PHP如何从另一个命名空间导入所有类

php - API 调用 JSON 到 MySQL

php - 将多个值与mysql中一个字段中的现有字符串进行匹配

sql - 如何使用 SQLExecDirect?