具有不同表的多个 MySQL 查询合二为一

Posted

技术标签:

【中文标题】具有不同表的多个 MySQL 查询合二为一【英文标题】:Multiple MySQL queries with different tables in one 【发布时间】:2012-05-04 14:25:56 【问题描述】:

所以我正在开发一款游戏,如果可能的话,我想让我的代码更简单一些。我有两张表需要查询,一张表要返回用户 ID,另一张表要进行背景检查。

统计表: 用户名 |黄金 |攻击 |防御|奖金 | ...

日志表: 登录 |攻击者 |被攻击 |时间 | ...

这是我可能会遇到的两个问题:

SELECT userid AS user FROM stats WHERE ($attack + $bonus) > (defense + bonus) ORDER BY gold DESC LIMIT 1

从日志中选择 COUNT(*) 作为计数 WHERE 攻击者 = $id AND 被攻击 = 用户 AND 日期 > $time - 86400

$变量当然是php变量,第二个查询中的'user'指的是第一个查询中的“AS用户”。我的目标是返回我可以攻击的最高金币的人的用户 ID,我在最后一天攻击了不到 5 次。 我不太确定如何加入这两者,但如果可能的话,我想加入!

【问题讨论】:

我认为您必须使用这两个查询,因为您想检索包含“您可以攻击的最高金币”的一行,而另一个查询则试图检索攻击日志...所以就像尝试将椅子和桌子相加。 【参考方案1】:

试试这个(未测试):

SELECT s.userid AS user 
FROM stats s
LEFT JOIN logs l ON (l.attacked = s.userid) // attacked is the one I want to get from stats with the highest gold
WHERE ($attack + $bonus) > (s.defense + s.bonus) 
    AND l.attacker = $id
    AND l.date > $time - 86400
ORDER BY s.gold DESC LIMIT 1

【讨论】:

@Copephobia 不客气。如果它有帮助,不要忘记标记答案。 ;-)

以上是关于具有不同表的多个 MySQL 查询合二为一的主要内容,如果未能解决你的问题,请参考以下文章

从 MySQL 中具有不同列的表的多个连接结果中删除重复项

对大型 MySQL 表的多个查询

从具有多个条目的另一个表更新MYSQL

创建具有多个表的视图?

来自多个表的 MySQL 最新相关记录

Informatica将多个连接的查询拆分到1个目标表的同一字段。