Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL和PHP获取MySQL上的行数_Php_Mysql_Sql - Fatal编程技术网

使用SQL和PHP获取MySQL上的行数

使用SQL和PHP获取MySQL上的行数,php,mysql,sql,Php,Mysql,Sql,我有一个数据库,其中包含如下表: - fruitsTable id name numberOfPeople 1 apple 3 2 orange 4 3 cherry 1 - peopleTable person fruit john apple john orange john cherr

我有一个数据库,其中包含如下表:

- fruitsTable

     id       name       numberOfPeople
     1        apple      3
     2        orange     4
     3        cherry     1 

- peopleTable

     person   fruit
     john     apple
     john     orange
     john     cherry
     jack     apple
     jack     orange
     ryan     apple
     ryan     orange
     meg      orange
假设peopleTable每天都在变化,由成千上万行组成。 此外,果园有上千行

如何定期计算numberOfPeople列

我计划设置一个每日cron作业,它将触发一个SQL命令来计算这个数字


假设我没有在SQL中使用这些JOIN命令的经验,那么在没有任何性能问题的情况下,我需要使用什么样的SQL命令?

您可能不应该存储该字段,否则如果peopleTable经常更改,它将非常频繁地过时。只要你想显示它,就简单地计算它

但如果你坚持要它,你可以:

更新f 设置f.numberOfPeople= 选择计数* 来自PeopleTableP 其中p.fruit=f.name 如果您想要在每次需要时更新numberOfPeople的餐桌水果,请执行以下操作:

选择f.id、f.name、COUNT*作为numberOfPeople 从f p.fruit=f.name上的内部联接人员表p 按f.id、f.name分组 如果您的水果中没有任何人与之关联,并且您仍希望将其计数为0,则可以将内部联接更改为左联接。

我建议您将peopleTable表更改为遵循结构

peopleTable
person fruit_id
john   1
...
通过这个问题,您需要遵循sql

SELECT a.id, COUNT(*) as count FROM fruitsTable a
LEFT JOIN peopleTable b ON a.id = b.fruit_id
GROUP BY a.id
这将输出以下示例数据

id  count
1   2
2   4
... 
和更新查询

UPDATE fruitTable a SET numberOfPeople = (
    SELECT COUNT(*) FROM peopleTable b WHERE a.id = b.fruit_id GROUP BY b.fruit_id
);

这将得到你所要求的,而不需要结果表,并不取决于人的结果表实际上是否在结果表中

select fruit, count(*) as 'Count' from peopleTable
group by fruit
order by fruit asc

如果两个表都需要存在,我的另一个解决方案与Filipe相同。

定期计算numberOfPeople列是什么意思?@AdRock我想在一页中打印喜欢樱桃、橙色和其他东西的人数。我想,为了做到这一点,我需要一个numberOfPeople列,而且我还需要随着peopleTable的变化而频繁地更新它。我需要把这个代码放在一个循环中吗,或者它会自动对所有的结果起作用吗?不,你不需要做一个循环。直到您将在更新中设置WHERE部分。否则,它将更新表格中的所有内容。我将在我到达家庭计算机上的文件后立即进行拍摄。我建议您查看Spell中关于在peopleTable中将姓名更改为id的建议。这样,如果你改变了一种水果的名字,你就不必在peopleTable中改变它的每一次出现。