用多维数组咨询mysql

时间:2014-09-24 22:00:53

标签: php mysql multidimensional-array

我正在尝试所有我想到的但没有任何作用。

我有一个像这样的数组

$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 个答案:

答案 0 :(得分: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列。