MySQL从表y中的类别中选择Count(来自另一个表的类别的产品)大于零

时间:2016-02-11 13:35:38

标签: php mysql

我使用下面的代码获取类别列表

`mysql_select_db($database_localhost, $localhost);
$query_category = "SELECT category, categoryID FROM categories";
$category = mysql_query($query_category, $localhost) or die(mysql_error());
$row_category = mysql_fetch_assoc($category);`

然后我使用do while代码列出类别:在代码中我计算该类别下的产品数量

<?php do { ?>
<li><?php  echo $row_category['category']; ?>" 


<span class="badge pull-right"><?php
$cadid = $row_category['categoryID'];
$resultcatd = mysql_query("SELECT  categoryID  FROM products WHERE   categoryID=$cadid "); 
$rowcatd = mysql_num_rows($resultcatd);  
echo $rowcatd;
?> </span>
</li>
<?php } while ($row_category = mysql_fetch_assoc($category)); ?> 

结果变为enter image description here

现在我不想要显示零产品的类别:是否有人更好地修改代码 $query_category = "SELECT category, categoryID FROM categories"; 仅选择包含产品的类别

2 个答案:

答案 0 :(得分:1)

您可以使用EXISTS

SELECT category, categoryID 
FROM categories AS c
WHERE EXISTS (SELECT 1 
              FROM products AS p
              WHERE p.categoryID  = c.categoryID )

INNER JOIN

SELECT DISTINCT category, categoryID 
FROM categories AS c
INNER JOIN products AS p ON p.categoryID  = c.categoryID

IN运营商:

SELECT category, categoryID 
FROM categories 
WHERE categoryID IN (SELECT categoryID FROM products)

答案 1 :(得分:1)

1用以下内容替换所有SQL:

$query = "
SELECT c.category
     , c.categoryID
     , COUNT(*) total
  FROM categories c
  JOIN products p
    ON p.categoryID = c.categoryID
 GROUP 
    BY c.category_id;
    ";

$result = mysql_query($query); 

2请参阅关于PHP的mysql_ API的弃用以及预准备语句的重要性。