将具有列ID的MySQL字符串绑定到PHP数组中的该ID

时间:2014-12-13 20:52:09

标签: php mysql arrays mysqli

我有一个由默认密钥中的ID组成的数组,我想将这些ID与这些ID组成的MySQL表中的对应描述以及不同列中的描述相关联。下面的表和数组示例:

Array
(
[0] => 1
[1] => 12
[2] => 17
[3] => 21
[4] => 26
)

+----+----------------------------+
| ID | description                |
+----+----------------------------+
| 1  | Example Description        |
+----+----------------------------+
| 2  | Wow, this is a description |
+----+----------------------------+
| 3  | Amazing description        |
+----+----------------------------+
| 4  | Description for ID4        |
+----+----------------------------+
| 5  | Yes, another description   |
+----+----------------------------+

输出必须如下所示(带或不带逗号):

Description, Another description, description...

该数组名为'$ arraymanutenzionehwos',表'interventi_hwos'

我提供了一般情况,但如果需要,我可以提供我的代码和所有必需的详细信息。

脚本的主要过程是在数组的每个元素中选择ID并将其绑定到Mysql表列中的正确描述。

非常感谢

2 个答案:

答案 0 :(得分:0)

如果没有更多详细信息,很难提供完整的解决方案,但这里有一个您可以使用的查询:

$sql = "
SELECT description FROM interventi_hwos
WHERE id IN (" . implode(',', $arraymanutenzionehwos). ")
ORDER BY FIELD(id, " . implode(',', $arraymanutenzionehwos). ")
";

根据您的示例数据,这将生成如下查询:

SELECT description FROM interventi_hwos
WHERE id IN (1,12,17,21,26)
ORDER BY FIELD (id, 1,12,17,21,26)

See a demo of this query

这将为您提供基于数组中id的描述列表,其顺序与原始id数组相同。您可以使用PHP格式化生成的数组。请注意,如果结果的顺序无关紧要,请删除ORDER BY子句。

答案 1 :(得分:0)

我认为你想使用这样的查询:

 SELECT GROUP_CONCAT(DISTINCT description ORDER BY description SEPARATOR ', ' ) AS d
   FROM interventi_hwos
  WHERE id IN (1,12,17,21,26)

这将产生一行,其中包含一列,并带有您想要的逗号连接字符串。

要从php执行此操作,您需要执行此类操作以将查询字符串放在一起。

$query = <<< 'ENDQUERY'
SELECT GROUP_CONCAT(DISTINCT description ORDER BY description SEPARATOR ', ' ) AS d
  FROM interventi_hwos
 WHERE id IN 
ENDQUERY
$query .= ' (' . implode( ',', array_filter($arraymanutenzionehwos, 'is_int') . ')';

请注意,这会通过消除其中不是整数的任何项来清理您的数组。这有助于防止SQL注入。