来自第二个表的 MySQL INNER JOIN (TOP10)
Posted
技术标签:
【中文标题】来自第二个表的 MySQL INNER JOIN (TOP10)【英文标题】:MySQL INNER JOIN from second table (TOP10) 【发布时间】:2015-02-14 05:39:46 【问题描述】:$stmt = $conn->prepare('选择 a.*, c.*, SUM(a.money+b.RESULT) 作为结果 来自用户 INNER JOIN 银行账户 c ON a.id = c.owner 内部联接 ( 选择所有者,总和(金额)作为结果 从银行账户 按所有者分组 ) b ON a.id = b.owner ORDER BY ARESULT DESC LIMIT 10');
什么问题,它只显示错误的一条记录?我想列出最多 10 条记录 - 比如拥有 [money+(all his bankaccounts amount)] 的 TOP 10 最富有的人
假设.. 我有 2 张桌子。
表:用户
ID | username | money
1 | richman | 500
2 | richman2 | 600
表格:银行账户
ID | owner | amount
65 | 1 | 50
68 | 1 | 50
29 | 2 | 400
所以它会列出:
richman2 1000$
富豪600美元
【问题讨论】:
【参考方案1】:试试这个:
SELECT a.*, (a.money + b.RESULT) AS ARESULT
FROM users a
INNER JOIN (SELECT owner, SUM(amount) AS RESULT
FROM bankaccounts
GROUP BY owner
) b ON a.id = b.owner
ORDER BY ARESULT DESC
LIMIT 10
【讨论】:
【参考方案2】:尝试使用子查询...
$stmt = $conn->prepare('SELECT a.*,
IFNULL((SELECT SUM(amount) FROM bankaccounts b WHERE b.owner=a.id),0) AS BANK_MONEY,
(IFNULL(a.money,0) + IFNULL((SELECT SUM(amount) FROM bankaccounts c WHERE c.owner=a.id),0)) AS ARESULT
FROM users a
ORDER BY ARESULT DESC LIMIT 0, 10');
编辑:为银行账户总额添加了一个字段
EDIT2:在 SQL 语句中添加 IFNULL,以防用户不在 BankAccounts 表中
【讨论】:
感谢您的回复,但还是有问题。 link 这是因为如果用户不在银行帐户表中,则不会显示。现在就试试。我在 SQL 语句中添加了 IFNULL 函数来处理这个问题。以上是关于来自第二个表的 MySQL INNER JOIN (TOP10)的主要内容,如果未能解决你的问题,请参考以下文章
LEFT JOIN,如果存在第二个表的结果,则添加到 PHP 中的数组
多表查询-inner join left join right joinfull join