将两个MYSQL查询合并为一个查询


Combining two MYSQL Queries into a single one

我正试图将两个MYSQL查询合并为一个查询。我想做的是选择每天添加的第一行和最后一行,并从当天的第一列中减去当天的最后一列,然后输出。这样做会让我在当天的游戏中获得XP的净收益。

以下是我的两个查询,它们唯一的区别是按DESC和ASC排序日期。数据库中我想相互减去的列是"xp"

$query = mysql_query("
                SELECT * FROM (SELECT  * FROM skills WHERE
                userID='$checkID' AND
                        skill = '$skill' AND
                        date >= ".$date."
                ORDER BY date DESC) as temp
                GROUP BY from_unixtime(date, '%Y%m%d')

                ");
                $query2 = mysql_query("
                SELECT * FROM (SELECT  * FROM skills WHERE
                userID='$checkID' AND
                        skill = '$skill' AND
                        date >= ".$date."
                ORDER BY date DESC) as temp
                GROUP BY from_unixtime(date, '%Y%m%d')

                "); 
SELECT FROM_UNIXTIME(date, '%Y%m%d') AS YYYYMMDD, MAX(xp)-MIN(xp) AS xp_gain
FROM skills
WHERE userID = '$checkID'
AND skill = '$skill'
AND date >= $date
GROUP BY YYYYMMDD

这假设XP总是增加,因此不需要使用时间来查找开始值和结束值。

如果这不是一个正确的假设,你想要的是这样的东西:

SELECT first.YYYYMMDD, last.xp - first.xp
FROM (subquery1) AS first
JOIN (subquery2) AS last
ON first.YYYYMMDD = last.YYYYMMDD

subquery1替换为返回每天第一行的查询,将subquery2替换为返回当天最后一行的查询。你在问题中发布的查询并不能做到这一点,但你可以找到许多SO问题来解释如何获得每个组的最高或最低行。