2014-12-13 4 views
1

У меня есть массив, состоящий из идентификаторов по умолчанию, я хочу связать эти идентификаторы с соответствующим описанием в таблице MySQL, составленной этими идентификаторами, и описанием в разные столбцы. Пример таблицы и массива ниже:Связывание строк MySQL с идентификатором столбца с этим идентификатором в массиве PHP

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 '

Я предусмотрел общий случай, но при необходимости я могу предоставить свой код и все необходимые данные.

Основной процесс сценария заключался в том, чтобы выбрать идентификатор в каждом элементе массива и привязать его к правильному описанию в столбце таблицы Mysql.

спасибо

ответ

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.

+0

Протестировано и дало лучшее время исполнения! большое спасибо – markserver

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

Это даст вам список описаний на основе идентификатора в вашем массиве в том же порядке, что и исходный массив идентификаторов. Вы можете использовать PHP для форматирования результирующего массива, как вам угодно. Обратите внимание: если порядок результата не имеет значения, удалите предложение ORDER BY.

Смежные вопросы