如何从数据库中获取逗号分隔值

Posted

技术标签:

【中文标题】如何从数据库中获取逗号分隔值【英文标题】:How to get comma separated values from database 【发布时间】:2016-11-12 13:37:36 【问题描述】:

我有以下 mysqli 查询,我想将输出为 (1,2,3,4) 类型格式的数组内爆。

这是查询和 asoc 数组代码:

$user_categories = mysqli_query($connect, "SELECT sub_cat FROM subscriptions WHERE sub_user_id = '$user_id'");

$category_ids = mysqli_fetch_all($user_categories,MYSQLI_NUM);

print_r($category_ids);

$category_ids = implode(", ",$category_ids);

然后我得到以下输出,我似乎无法隔离这些值...

Array ( 
[0] => Array ( [0] => 5 ) 
[1] => Array ( [0] => 8 ) 
[2] => Array ( [0] => 4 ) 
[3] => Array ( [0] => 2 ) 
)

抱歉,如果我在这里遗漏了一些非常明显的东西。我一直在尝试解决这个问题,但由于我缺乏 php 经验,我不能 100% 确定要搜索什么。

我还尝试使用$user_categories 查询的结果进行简单的内爆,按照我在该主题上看到的其他 StackExchange 答案的说明,但一无所获(代码如下):

$user_categories = mysqli_query($connect, "SELECT sub_cat FROM subscriptions WHERE sub_user_id = '$user_id'");

$category_ids = implode(", ",$user_categories);

echo $category_ids;

【问题讨论】:

我不确定你期望的输出是什么,你能写一个例子吗? 第一句话说:(1,2,3,4) 【参考方案1】:

$category_ids 是一个数组(行)数组,所以你不能只把它内爆。您需要从每一行中获取第一个值并将其分解。

PHP 5.5+ 解决方案:

使用array_column()

$category_ids = implode(', ', array_column($category_ids, 0));

echo $category_ids;

输出:

5、8、4、2

PHP 5.3+ 解决方案:

array_map() 替换为array_column()

$category_ids = implode(', ', array_map(function ($row)  return $row[0]; , $category_ids));

echo $category_ids;

输出:

5、8、4、2

【讨论】:

谢谢你,你是救生员!接受并 +1 以获得明确的 5.3 + 5.5 答案:) 有时我会找到没有得到应得支持的答案。不错的解决方案 Shira【参考方案2】:

您从mysqli_fetch_all 获得的$category_ids 是数组数组,仅通过将其传递给内爆无法检索到所需的结果。但是,这应该可以完成工作:

$category_ids = mysqli_fetch_all($user_categories,MYSQLI_NUM);

$category_ids_imploded = implode(', ', array_map(function ($entry) 
  return $entry['0'];
, $category_ids));

或者,如果您使用的是 PHP 5.5 或更高版本,您可以使用array_column 来减少混乱:

$category_ids_imploded = implode(', ', array_column($category_ids, 0));

【讨论】:

【参考方案3】:

Mysql解决方案

$sql = "SELECT group_concat(sub_cat) FROM subscriptions WHERE sub_user_id = '$user_id'"
$result = mysqli_query($connect, $sql);
$category_ids = mysqli_fetch_row($user_categories)[0];

PDO 解决方案(首选)

$sql = "SELECT group_concat(sub_cat) FROM subscriptions WHERE sub_user_id = ?"
$stmt = $connect->prepare($sql);
$stmt->execute([$user_id]);
$array = $stmt->fetchAll(PDO::FETCH_COLUMN);
$category_ids = implode(",", $array);

【讨论】:

以上是关于如何从数据库中获取逗号分隔值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据两个逗号分隔值的列中的任何一个值获取记录

SQL 从 XML 中获取列的逗号分隔值

pyspark 从逗号分隔值列表中创建多行

如何在laravel中使用逗号分隔值的列上使用'where'

如何从 JQuery 中的逗号分隔值列表中绑定 <select>?

如何从列分隔的数据集到逗号分隔的数据集?