好的,我现在有3个数据库表:
用户
编号:1,2
姓名:User1,User2
公司
编号:1,2,3
股价:10.00,0.45,5.98
投资组合
用户id:1、1、2
公司编号:1、2、1
股数:200、100、30
你知道,这是一个基本的股市模拟。我需要根据他们的投资组合总价值获得前5名用户,计算如下:
companies.share_price * portfolios.amount_of_shares
记住,一个用户的投资组合中可以有来自多家公司的股票,选择所有的数据然后用PHP循环浏览似乎是一种浪费,因为理论上我可以有大约200家公司。。。所以我想知道是否可以编写一个SQL查询来计算每个公司拥有的股票的价值,然后将所有这些价值加起来只产生一个变量,这样我就可以按顺序排列并限制5个(获得前5个执行者)
编辑:我在这个项目中使用CodeIgniter,如果这有区别的话。

最佳答案

SELECT *, SUM(amount_of_shares*c.share_price) as total FROM `portfolios`
LEFT JOIN companies c ON c.id = portfolios.company_id
GROUP BY `user_id`
ORDER BY total DESC
LIMIT 5

09-03 20:29