我正在尝试生成一个“产品”列表,其中详细列出了每个“产品在mysql查询中出现的次数。”
概要:
1.从数据库中获取最近30天的订单。
2。获取这些订单中显示的产品。
3。计算产品在订单中出现的次数。
4。显示“产品名称”和“已售出数量”的列表
到目前为止我有什么(我进入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个小时试图做到这一点。希望有人可以提供帮助。
感谢
杰森
答案 0 :(得分: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
或类似的东西。在不知道数据库结构如何的情况下,很难准确地猜测它应该如何编写。
答案 1 :(得分: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
答案 2 :(得分: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);
答案 3 :(得分: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");