首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sql查询中使用sql查询

如何在sql查询中使用sql查询
EN

Stack Overflow用户
提问于 2013-03-29 03:18:36
回答 2查看 78关注 0票数 3

我有两张桌子:

  1. 表类别(cat_id,类别)
  2. 表category_details(cat_id,id,.)

我有如下所示的sql代码:

代码语言:javascript
复制
$sql=mysql_query("select * from category");
while($rows=mysql_fetch_array($sql)){
$id_count=$rows['cat_id'];      

$sql1=mysql_query("select * from category_details where cat_id='$id_count'");
$count=mysql_num_rows($sql1);

}

我能这样用吗?

EN

回答 2

Stack Overflow用户

发布于 2013-03-29 03:22:56

使用JOIN

示例

代码语言:javascript
复制
SELECT * FROM category LEFT JOIN 
   category_details ON category_details.cat_id = category.cat_id;

上面的查询将返回所有category和相关的category detail

OP注释响应

代码语言:javascript
复制
SELECT    c.name,
          IFNULL(sub_c.total, 0) num
FROM      category c
LEFT JOIN ( SELECT   COUNT(*) total, cat_id
            FROM     category_details
            GROUP BY cat_id
          ) sub_c ON (sub_c.cat_id = c.cat_id);

完全代码

代码语言:javascript
复制
<?php
    $query = "SELECT    c.name,
                IFNULL(sub_c.total, 0) num
            FROM      products_category c
                LEFT JOIN ( SELECT   COUNT(*) total, cat_id
                    FROM     product
                    GROUP BY cat_id
                ) sub_c ON (sub_c.cat_id = c.id)";

    $result = mysql_query($query)or die(mysql_error());

    echo "<table><tr><td>NameCount</td></tr>";
    while($row = mysql_fetch_assoc($result))
    {
        echo "<tr><td>".$row['name']."(".$row['num'].")"."</td></tr>";
    }
    echo "</table>";
?>

MySQL表

ProductCategory表

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `products_category` (
  `id` int(11) NOT NULL,
  `name` varchar(200) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Dumping data for table `products_category`
--

INSERT INTO `products_category` (`id`, `name`) VALUES
(1, 'Erasmus'),
(2, 'Preston'),
(3, 'Ulric'),
(4, 'Gray'),
(5, 'Joseph'),
(6, 'Merrill'),
(7, 'Alan'),
(8, 'Jeremy'),
(9, 'Solomon'),
(10, 'Andrew'),
(11, 'Galvin'),
(12, 'Craig'),
(13, 'Cameron'),
(14, 'Omar'),
(15, 'Addison');

积表

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `product` (
  `id` int(11) NOT NULL,
  `name` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `cat_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Dumping data for table `product`
--

INSERT INTO `product` (`id`, `name`, `cat_id`) VALUES
(1, 'Wesley', 1),
(2, 'Graiden', 2),
(3, 'Cruz', 5),
(4, 'Hayden', 5),
(5, 'Kennedy', 6),
(6, 'Uriah', 8),
(7, 'Alan', 8),
(8, 'Cade', 1),
(9, 'Ryan', 5),
(10, 'Brody', 7);

上面的将输出

代码语言:javascript
复制
Erasmus(2)
Preston(1)
Ulric(0)
Gray(0)
Joseph(3)
Merrill(1)
Alan(1)
Jeremy(2)
Solomon(0)
Andrew(0)
Galvin(0)
Craig(0)
Cameron(0)
Omar(0)
Addison(0)
票数 3
EN

Stack Overflow用户

发布于 2013-03-29 04:03:03

你想把COUNTGROUP BY结合使用吗?

代码语言:javascript
复制
select c.cat_id, c.cat_name, count(cd.*)
from category c
   left join category_details cd 
       on c.cat_id = cd.cat_id
group by c.cat_id, c.cat_name

这将返回与其关联的category_details计数的每个类别。使用LEFT JOIN将返回所有类别--如果您只想要那些有详细信息的类别,请用INNER JOIN替换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15696794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档