我正在尝试创建一个显示添加到数据库的产品的页面。
我需要使用'foreach'自动显示所有产品。
我遇到了一个需要显示每个产品下载次数的部分。唯一的方法是在下载表中计算包含产品文件名的行数。
这是我到目前为止使用的,但它不起作用:
SELECT * FROM products, file_product, files, downloads WHERE products.id = file_product.product_id AND file_product.file_id = files.id AND files.file_name = downloads.file_name
这些是我的表:[产品,文件_产品,文件,下载]
答案 0 :(得分:1)
听起来像你这样做很难。我建议你看看mysql的分组功能,特别是GROUP BY
。你根本不需要遍历查询,只有结果。
像
这样的东西SELECT `file_name`, COUNT(*) AS `count` FROM `files` GROUP BY `file_name`;
结果应如下所示:
---------------------------
| file_name | count|
--------------------------|
| background-2.png | 2 |
| foo.png | 1 |
---------------------------
如果您需要将JOIN
表限制为当前产品的文件,则可以file_product
,因为我写的内容会为您提供所有产品的所有文件。
示例:
SELECT
f.`file_name`,
COUNT(*) AS `count`
FROM `files` f
JOIN `file_product` fp
ON fp.`file_id` = f.`id`
JOIN `product` p
ON fp.`product_id` = ?
JOIN `downloads` d
ON d.`file_name` = f.`file_name`
GROUP BY `file_name`;
?
是您为当前产品添加产品ID的地方。
答案 1 :(得分:0)
你必须写:
SELECT `file_name'`, COUNT(*) AS `count` FROM table GROUP BY `count` ORDER BY `count` DESC;
然后,此命令按descroissant顺序返回每个file_name组的每个表的行数。
为了实现PHP:
<?php
// connect to MySQL
$db = mysql_connect('localhost', 'login', 'password');
// select database
mysql_select_db('database_name',$db);
// SQL query
$sql = 'SELECT `file_name`, COUNT(*) AS `count` FROM table GROUP BY `count` ORDER BY `count` DESC;';
$req = mysql_query($sql) or die('Error SQL !<br>'.$sql.'<br>'.mysql_error());
// close mysql
mysql_close();
?>
我无法测试它,所以它可能是假的:/