计算表中包含file_name的行数

时间:2017-01-10 15:42:19

标签: php mysql

我正在尝试创建一个显示添加到数据库的产品的页面。

我需要使用'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

这些是我的表:[产品,文件_产品,文件,下载]

Table: products

Table: file_product

Table: files

Table: downloads

2 个答案:

答案 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();
?> 

我无法测试它,所以它可能是假的:/