我有一个for循环,返回与产品列表对应的制造商名称:
for ($i = 0, $n = sizeof($order->products); $i < $n; $i++) {
$v_query = tep_db_query("SELECT manufacturers_id FROM ".TABLE_PRODUCTS." WHERE products_id = '".$order->products[$i]['id']."'");
$v = tep_db_fetch_array($v_query);
$mfg_query = tep_db_query("SELECT manufacturers_name FROM ".TABLE_MANUFACTURERS." WHERE manufacturers_id = '".$v['manufacturers_id']."'");
$mfg = tep_db_fetch_array($mfg_query);
echo $mfg['manufacturers_name'];
}
如何只返回列表中最常出现的一个制造商名称?我似乎无法将结果正确地指定为数组以进行数组计数/搜索。
答案 0 :(得分:0)
首先,您可以将所有product_ids
插入一个数组中,将其放在一个查询中:
$productIds = array();
for ($i = 0, $n = sizeof($order->products); $i < $n; $i++) {
$productIds[] = $order->products[$i]['id'];
}
$productIds = array_unique($productIds);
您必须在所有product_ids的一个查询中执行此操作,如下所示:
$sql = "SELECT manufs.manufacturers_id, manufs.manufacturers_name, COUNT(*) as manufacturers_count
FROM ".TABLE_PRODUCTS." prods
JOIN ".TABLE_MANUFACTURERS." manufs
ON prods.manufacturers_id = manufs.manufacturers_id
WHERE products_id IN ('". implode("', '", $productIds) ."')
GROUP BY manufs.manufacturers_id
ORDER BY manufacturers_count DESC";
它将为您提供所有manufacturers_id
,其名称以及数据库中存在的行数,按降序排序(从高到低)。
修改强>
我注意到您没有以任何方式使用订单ID,因此上面的查询(以及您发布的那个)也会查看您拥有的所有订单并计算最受欢迎的产品。如果您想获得一个/多个订单的最受欢迎产品,则需要在订单表中添加JOIN
,然后在WHERE
子句中添加特定条件。