2014-09-24 4 views
0

im пытается все, что пришло мне в голову, но ничего не работает.Проконсультируйтесь с mysql с многомерным массивом

У меня есть массив как этот

$sku _list = Array(
[0] => Array 
    (
     [sku] => 885370773958 
    ) 

[1] => Array 
    (
     [sku] => 711719805205 
    )) 

С следующим кодом, чтобы проконсультироваться

$db = new mysqli("localhost", "user", "pass", "db"); 
$consult_sku = $db->query("SELECT * FROM fullfilment WHERE sku IN (" . implode(",", array_map(function ($sku_entry) { return $sku_entry['sku'];},$sku_list)) . ")"); 

получает следующий массив, только с первым значением $ sku_list

Array 
(
    [0] => 885370773958 
    [sku] => 885370773958 
    [1] => CAMO 
    [name] => CAMO 
    [2] => 1 
    [quantity] => 1 
) 

Я хочу восстановить массив, похожий на $ sku_list, чтобы сравнить, какой способ лучше всего получить результат?

Поздравления!

ответ

1

Нет никакого позора в использовании PHP-кода, и он будет выполняться довольно быстро. Так что вместо того, чтобы этот монстр в запросе:

array_map(function ($sku_entry) { return $sku_entry['sku'];},$sku_list) 

вы могли бы написать просто понять PHP код, как это перед вашим запросом:

foreach ($sku_list as $item) $sku[] = $item['sku']; 

Затем сделайте запрос:

$sql = 'SELECT sku FROM fullfilment WHERE sku IN ('.implode(',',$sku).')'; 
$result_sku = $db->query($sql); 

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

while($row = $result_sku->fetch_assoc()) { 
    $sku_found[] = $row; 
} 

Теперь $sku_found будет точно также структурирован для $sku_list.

Обратите внимание, что в вашей команде SQL содержится *, что означает, что вы извлекаете все столбцы. В моем примере использовался только столбец sku.

+0

Спасибо большое! это было действительно полезно для вашего объяснения и советов. Я все еще новичок на php. –

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