尝试返回表中的所有行,并从另一个表中计算具有匹配ID的行数

时间:2016-03-22 13:31:59

标签: php mysql

我有两张桌子。表一是products_cat_arabic,表二是products_arabic

我需要从cat获取每个products_cat_arabic的名称,并从另一个表中获取相关cat_id的数字。 这是我的问题:

<?php
    $getCats = $db->query(
    'SELECT c.*, COUNT(*) as num_items 
    FROM products_cat_arabic c 
    JOIN products_arabic q ON q.id = c.id 
    GROUP BY c.id'
    );
while ($gCat = mysqli_fetch_array($getCats)) {
?>
<li class="col-xs-12 col-md-4 col-lg-3"><a href="#"><?php print $gCat['cat_name']; ?>
    </a><span
        title="products number"><?php print $gCat['num_items']; ?></span></li>
    <?php
    }
    ?>

得到每只猫的名字,但产品的数量是错误的。

编辑:

SELECT c.cat_name, COUNT(*) as num_items 
FROM products_cat_arabic c 
JOIN products_arabic q ON q.cat = c.id 
GROUP BY c.id

计数正确,但我有3个类别只能看到2,因为最后一个没有任何产品。

2 个答案:

答案 0 :(得分:0)

SELECT c.cat_name,
      t.nb as num_items 
FROM products_cat_arabic c
INNER JOIN 
 (SELECT COUNT(*) as nb, products_arabic.cat
   FROM products_arabic
   GROUP BY products_arabic.cat) t ON t.cat = c.id
GROUP BY c.cat_name

答案 1 :(得分:0)

试试这个:

SELECT c.cat_name, COUNT(q.cat) as num_items FROM products_arabic q 
LEFT JOIN products_cat_arabic c ON q.cat = c.id 
GROUP BY q.cat

我不确定,但我猜q.catc.cat_name有关,而与c.id无关。无论如何,我真的不知道你的桌子,但如果它错了,你可以改变加入q.cat = c.id