0

各「製品」がmysqlクエリに表示される回数の詳細を示す「製品」のリストを生成しようとしています。

概要:
1。データベースから過去30日間の注文を取得します。
2.それらの注文に表示される製品を入手します。
3.製品が注文に表示される回数を取得します。
4.「製品名」と「販売数量」のリストを表示します。

これまでのところ(私はPHPに1週間入っているので、混乱している場合は失礼します)

$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

最も美しいものではありません...おそらく製品テーブルから製品情報(つまり名前)を取得したいでしょうが、ここに行きます:

$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 *, 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

これが実際に機能したものです。

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 に答える