繁体   English   中英

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

[英]MySQL Select from category in table y where Count (of the category's product from another table) is greater than zero

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

`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)); ?> 

结果变成 在此处输入图片说明

现在,我不希望显示具有零产品的类别:是否有人可以用更好的方式修改代码$query_category = "SELECT category, categoryID FROM categories"; 仅选择具有产品的类别

您可以使用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用如下所示替换所有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的弃用以及准备好的语句的重要性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM