具有不同表的多个 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 查询合二为一的主要内容,如果未能解决你的问题,请参考以下文章