in_array函数的一些问题

时间:2013-03-30 22:40:15

标签: php mysql mysqli

您好我正在尝试使用in_array,我认为我的语法是正确的, 但它说“第二个参数的错误数据类型”

我的代码是

$result = mysqli_query($con, "SELECT * FROM Products WHERE Quantity_On_Hand < Min_Stock");
$filter = mysqli_query($con, "SELECT ProductID FROM Orders");

while($row = mysqli_fetch_array($result))
    {
    if (in_array($row['ProductID'], $filter))
        {
        }
    }

我的想法是找出产品表中的ProductID是否在订单表中。

有人可以帮助我,谢谢: - )

2 个答案:

答案 0 :(得分:3)

$filter不是数组;它是mysqli_result对象:

$filter = mysqli_query($con, "SELECT ProductID FROM Orders");

我想你想迭代它,将每个ProductID添加到一个新数组,然后将该数组传递给in_array函数,如下所示:

$filter = mysqli_query($con, "SELECT ProductID FROM Orders");

$product_ids = array();

while ($row = $filter->fetch_assoc())
{
    $product_ids[] = $row['ProductID'];
}

$result = mysqli_query($con, "SELECT * FROM Products WHERE Quantity_On_Hand < Min_Stock");

while($row = mysqli_fetch_array($result))
{

    if (in_array($row['ProductID'], $product_ids))
    {

    }

}

答案 1 :(得分:3)

您的代码失败,因为$filter是MySQLi结果资源,而不是数组。实际上,通过两个表之间的简单内部连接可以更好地完成此操作。如果ProductID中不存在Orders,则INNER JOIN会将其从结果集中排除在首位。

$sql = "
SELECT Products.* 
FROM
  Products
  INNER JOIN Orders ON Products.ProductID = Orders.ProductID
WHERE Quantity_on_Hand < Min_stock";

$result = mysqli_query($con, $sql);
if ($result) {
  $results = array();
  while ($row = mysqli_fetch_array($result)) {
    $results[] = $row;
  }
}
// Now $results is a 2D array of all your Products

如果您想要检索所有 Products,并且只是指示它是否有有效订单,请使用LEFT JOIN并测试{{1}在Orders.ProductID列表中为null:

SELECT

在这种情况下,您可以在行集中循环测试它是否有订单:

$sql = "
SELECT
  Products.* ,
  /* No orders will print 'no-orders' in a pseudo column called has_orders */
  CASE WHEN Orders.ProductID IS NULL THEN 'no-orders' ELSE 'has-orders' AS has_orders
FROM
  Products
  LEFT JOIN Orders ON Products.ProductID = Orders.ProductID
WHERE Quantity_on_Hand < Min_stock";

$result = mysqli_query($con, $sql);
if ($result) {
  $results = array();
  while ($row = mysqli_fetch_array($result)) {
    $results[] = $row;
  }
}
// Now $results is a 2D array of all your Products
// And the column $row['has_orders'] will tell you if it has any...