0

我正在尝试生成一个“产品”列表,详细说明每个“产品”出现在 mysql 查询中的次数。

大纲:
1. 从数据库中获取最近 30 天的订单。
2. 获取出现在这些订单中的产品。
3. 计算产品出现在订单中的次数。
4. 显示一个带有“产品名称”和“已售出数量”的列表

我到目前为止所拥有的(我是 1 周的 php,所以如果它是一团糟请见谅)

$orderid = mysql_query("SELECT orderid FROM isc_orders WHERE orddate >= 1334266286 ");
while ($row =  mysql_fetch_array($orderid)) {
$pslm = mysql_query("SELECT * FROM isc_order_products WHERE orderorderid = '$row[0]' GROUP BY ordprodid");      
while ($row =  mysql_fetch_array($pslm)) {
    echo $row[2] . "</br>";

所以这给了我一个销售产品的清单,但没有分组,当然也没有显示数量。
我在这里浏览了许多帖子,并花了大约 3 个小时试图做到这一点。
希望这里有人可以提供帮助。
谢谢杰森
_

4

4 回答 4

0

为什么不使用连接然后对结果进行分组:

SELECT *, COUNT(1) AS quantity
FROM isc_orders AS o
LEFT JOIN isc_order_products AS p ON o.orderid = p.orderorderid
WHERE orddate >= 1334266286
GROUP BY p.productid

或类似的东西。如果不知道数据库的结构,很难准确地猜出它应该如何编写。

于 2012-05-15T02:14:37.263 回答
0

好吧,以利亚·马登(Elijah Madden)已经发布了几乎相同的内容,但是既然我已经写过了……就这样吧:

SELECT 
    product.name,
    COUNT(*)
FROM isc_orders order
    INNER JOIN isc_order_products product
    ON product.orderorderid = order.orderid
WHERE order.orddate >= 1334266286
GROUP BY order.ordprodid
于 2012-05-15T02:17:44.390 回答
0

不是最漂亮的东西......你可能想从产品表中获取产品信息(即名称),但你去吧:

$order_query = mysql_query("
    SELECT orderid
    FROM isc_orders
    WHERE orddate >= " . (time() - (30 * 86400)));

if (mysql_num_rows($order_query) > 0)
{
    $orders = array();

    while ($order = mysql_fetch_assoc($order_query))
        $orders[] = mysql_real_escape_string($order['orderid']);

    $product_query = mysql_query("
        SELECT *
        FROM isc_order_products
        WHERE orderorderid IN ('" . implode("', '", $orders) . "')");

    if (mysql_num_rows($product_query) > 0)
    {
        $products = array();
        $times_ordered = array();

        while ($product = mysql_fetch_assoc($product_query))
        {
            if (!isset($times_ordered[$product['ordprodid']]))
                $times_ordered[$product['ordprodid']] = 0;

            $times_ordered[$product['ordprodid']]++;

            if (!isset($products[$product['ordprodid']]))
                $products[$product['ordprodid']] = $product;
        }

        foreach ($products as $id => $product)
            $products[$id]['times_ordered'] = $times_ordered[$id];
    }

    mysql_free_result($product_query);
}

mysql_free_result($order_query);
于 2012-05-15T02:21:52.937 回答
0

这才是真正起作用的。

SELECT ordprodname, SUM(ordprodqty), ordprodid
FROM isc_orders, isc_order_products 
WHERE orderid = orderorderid AND orddate >= UNIX_TIMESTAMP() - ('$days' * 86400) 
GROUP BY ordprodname 
ORDER BY SUM(ordprodqty) DESC");
于 2012-05-16T10:36:15.427 回答