使用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中改变它的每一次出现。