Php 可以代替mysql\u num\u行使用的mysql查询

Php 可以代替mysql\u num\u行使用的mysql查询,php,mysql,Php,Mysql,我想知道如何编写一个mysql查询来检查其他表中存在多少条记录 table 1 : names id name -- ---- 4 john 5 mike 6 jenny table 2 : cars id name_id car -- ------- --- 1 4 bmw 2 4 wv 3 6 honda query=“SELECT*FROM names,其中id='4'在额外的左侧外部连接中为每个人添加汽车数量 SELECT n.*

我想知道如何编写一个mysql查询来检查其他表中存在多少条记录

table 1 : names

id name
-- ----
4  john
5  mike
6  jenny

table 2 : cars

id name_id car
-- ------- ---
1   4      bmw
2   4      wv
3   6      honda

query=“SELECT*FROM names,其中id='4'
在额外的
左侧外部连接中为每个人添加汽车数量

SELECT  n.*, c.cnt
FROM    names n
        LEFT OUTER JOIN (
          SELECT  name_id, cnt = COUNT(*)
          FROM    cars
          GROUP BY
                  name_id
        ) c ON c.name_id = n.id
WHERE   ID = 4
如果性能是一个问题,您可以将该条件添加到左侧联接,但以牺牲可维护性为代价

SELECT  n.*, c.cnt
FROM    names n
        LEFT OUTER JOIN (
          SELECT  name_id, cnt = COUNT(*)
          FROM    cars
          WHERE   name_id = 4 -- Condition needs to be updated in two places
          GROUP BY
                  name_id
        ) c ON c.name_id = n.id
WHERE   ID = 4

在附加的
左侧外部连接中为每个人添加车辆数量

SELECT  n.*, c.cnt
FROM    names n
        LEFT OUTER JOIN (
          SELECT  name_id, cnt = COUNT(*)
          FROM    cars
          GROUP BY
                  name_id
        ) c ON c.name_id = n.id
WHERE   ID = 4
如果性能是一个问题,您可以将该条件添加到左侧联接,但以牺牲可维护性为代价

SELECT  n.*, c.cnt
FROM    names n
        LEFT OUTER JOIN (
          SELECT  name_id, cnt = COUNT(*)
          FROM    cars
          WHERE   name_id = 4 -- Condition needs to be updated in two places
          GROUP BY
                  name_id
        ) c ON c.name_id = n.id
WHERE   ID = 4
这应该做到:

SELECT names.id, name, COUNT(car) as 'cars'
FROM names LEFT JOIN cars ON names.id = cars.nameid 
WHERE names.id = '4'
GROUP BY names.id, name
这应该做到:

SELECT names.id, name, COUNT(car) as 'cars'
FROM names LEFT JOIN cars ON names.id = cars.nameid 
WHERE names.id = '4'
GROUP BY names.id, name
您还可以将该列命名为:

SELECT n.*, COUNT(c.*) AS `num_cars` FROM names n, cars c WHERE n.id = 4
您还可以将该列命名为:

SELECT n.*, COUNT(c.*) AS `num_cars` FROM names n, cars c WHERE n.id = 4

这比使用子查询更有效。@Hamish,OP应该尝试所有的解决方案并从中得出结论。使用SQL Server,在联接中执行group by的速度是以前的两倍。标题和标记指定MySQL。在当前的MySQL版本中,子查询的优化效果非常差。参考这比使用子查询更有效。@Hamish,OP应该尝试所有的解决方案并从中得出结论。使用SQL Server,在联接中执行group by的速度是以前的两倍。标题和标记指定MySQL。在当前的MySQL版本中,子查询的优化效果非常差。参考这将返回cars.id=4而不是names.id=4的所有记录,一个简单的更改想法将返回cars.id=4而不是names.id=4的所有记录,一个简单的更改想法我不知道Ahmet vardar期望的是什么,但是通过这个查询,他没有得到“0”cars的“mike”。。。我认为JonVD发布的左连接将是更好的解决方案(因为它列出了所有的名字,也列出了没有汽车的名字)@oezi,你是对的,我已经将内部连接更改为外部连接。不知道Ahmet vardar期望什么,但是通过这个查询,他没有得到“0”汽车的“mike”。。。我认为JonVD发布的左连接是更好的解决方案(因为它列出了所有的名字,也列出了没有车的名字)@oezi,你说得对,我已经将内部连接更改为外部连接。