您好我正在尝试使用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是否在订单表中。
有人可以帮助我,谢谢: - )
答案 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...