Получить правильный ключ (ы) массива с PHP / MySQL поиск объединенных таблиц

У меня есть две таблицы:

1-й стол (t1):

item_no | item_desc
-------------
200  | d1
250  | d2
257  | d3
305  | d4
605  | d5
606  | d6

2-й стол (т2)

id | item_no | item_value
-------------
1 | 200  | v1_200
1 | 250  | v1_250
1 | 257  | v1_257
1 | 305  | v1_305
1 | 605  | v1_605
1 | 606  | v1_606
2 | 200  | v2_200
2 | 250  | v2_250
2 | 257  | v2_257
2 | 305  | v2_305
2 | 606  | v2_606

Я получаю значение поля id в t2 через $ id = $ _POST [‘id’]; и делать проверки безопасности на нем и т. д.

Я выполняю поиск объединений обеих таблиц с помощью запроса:

$items= array();
$items_no = array('200', '250', '257', '305', '605', '606');
$items_nos = implode(",", $nutrient_no);

$sql = "SELECT item_value FROM t1 join t2 ON  t1.item_no=t2.item_no WHERE t1.id='$id' AND t2.item_no in ($items_nos)";

Наконец, я извлекаю результаты, как это:

$retval = mysql_query($sql) or die('Query failed: ' . mysql_error());
while($row = mysql_fetch_assoc($retval))
{
$item_value[] = $row['item_value'];
$first_item = $item_value['0'];
$second_item = $item_value['1'];
....
$last_item = $item_value['5'];
}

Проблема в том, что при поиске по идентификатору № 2, как показано в приведенном выше примере, item_no 605 не существует. Поиск по-прежнему работает нормально, но ключи массива уже не верны, то есть значение $ last_item не возвращается должным образом, потому что ключ теперь 4 вместо 5.

ВАЖНО: в зависимости от идентификатора, используемого при поиске, в результатах может отсутствовать ни одна, одна или несколько строк.

Я попытался это как решение:

$items_count = count($item_value);
for( $x = 1; $x <= $items_count ; $x++ ) {
$foo = 'item_value' . $x;
if ( isset( $$item_value[$x-1])) {
$$foo = $$item_value[$x-1];
}
else {
$$foo = '';
}
$last_item = $foo['5'];
}

но это не похоже на работу.

Что я делаю неправильно? Есть лучший способ сделать это? Любая помощь с благодарностью!

0

Решение

Мне странно иметь переменное число переменных в зависимости от результата запроса … но вы можете попробовать что-то вроде этого:

for ($i=0; $i < count($arr)-1; $i++) {
${"item_n" . $i} = $arr[$i];
}

И для последнего пункта:

$last_item = end(array_values($arr));
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector