我有一个由默认密钥中的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表列中的正确描述。
非常感谢
答案 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)
这将为您提供基于数组中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注入。