2014-09-24 56 views
0

即时通讯尝试所有想到的东西,但没有任何工作。请教与多维数组的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新手。 – 2014-09-25 16:48:58