【问题标题】:Array of ids sorted by another database field in PHP由 PHP 中的另一个数据库字段排序的 id 数组
【发布时间】:2019-07-21 12:44:59
【问题描述】:

我有一个通过 javascript 传递到 php 文件的 id 数组。在 php 中,我收到一个包含 5 个元素的数组,如下例所示:

23
43
33
123
12 

数据库表是这样的:

id
playerId
name
**position**

传递的数组包含 playerIds (23,43,33,123,12),但我想按数据库字段 position(不是数字)对该数组进行排序。

这可能吗?

提前非常感谢!

编辑:好的,我设法解决了这个问题。如果对任何人有帮助,我会将代码保留在这里:

$v = $_GET['players'];
$sortedList = array();
$playerIdsStr = implode("," , $v);
$s = "select id from players where id in ($playerIdsStr) order by position";
$q = mysqli_query($conexion, $s);

while($r = mysqli_fetch_array($q))
{

    $sortedList[] = $r["id"];

}

$sortedList 是 $v 数组,但按位置排序。正是我需要的。

【问题讨论】:

  • 你的服务器版本是多少?
  • 嗨@PaulSpiegel,这是你要的吗?版本 PHP 5.6.30 版本 MySQL 10.1.37-MariaDB-cll-lve
  • 是的 - 这就是我的意思。太糟糕了,它不是 MariaDB 1.3
  • 为什么会这样??????
  • MariaDB 10.3 支持 VALUES 表构造函数:dbfiddle.uk/…

标签: php mysql arrays sorting


【解决方案1】:

试试这个... select * from table_name where playerId in ('23','43','33','123','12') order by position

注意:请避免使用('23,43,33,123,12') 并使用('23','43','33','123','12')(23,43,33,123,12)

假设$playerIds = [23,43,33,123,12]; 然后使用:

$playerIdsStr = implode("," , $playerIds);
$sql = "select * from table_name where playerId in ($playerIdsStr) order by position"

如果 playerId 字段是数据库中的 整数,这将起作用。对于 字符串 使用:

$playerIdsStr = implode("','" , $playerIds);
$sql = "select * from table_name where playerId in ('$playerIdsStr') order by position"

【讨论】:

  • 您好 Nikhill,非常感谢您的快速回答。我将数组作为变量接收,比如说 $v,所以我尝试了这个:“select * from player where id in ('".$v."') order by position” 但是,显然,它不起作用。对不起,我对此知之甚少:(再次感谢!
  • 将数组转换为字符串使用php的implode() 函数。假设你有array=[1,2,3,4] 使用implode() 你会得到1,2,3,4
  • 这样做我得到一个很长的数字,没有空格也没有逗号。而且,当然,在进行查询时,它没有找到任何玩家。如果我取这么长的数字并用逗号分隔不同的 id,我只会得到第一个玩家,而不是其余的玩家(我直接在 phpmyadmin 中检查了数据库)。
  • 如果 SQL 列是整数类型,则引号不是必需的。
  • 您必须将第一个参数写为逗号,例如implode(",",array)implode(separator,array)查看更多link
猜你喜欢
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 2011-04-18
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多