优化并将sql查询合并为一个 - 新手警报

时间:2014-04-18 21:26:14

标签: mysql sql database

如何从db中合并这些SQL查询的最佳方法。

我正在使用此功能但希望在可能的情况下将其他两个添加到其中

SELECT m.username, sum(d.liter) AS TOT_LITERS, min(krl) AS TOT_KM
FROM members m JOIN
     diesel d
     ON (d.userid = m.id)
WHERE d.dato >= '$dx'
GROUP BY m.username
ORDER BY 2 DESC;

和另外两个

SELECT SUM(liter) AS totalfuel
FROM diesel
WHERE diesel.dato >= '$dx' AND userid = ".$_COOKIE['userid']."
ORDER BY diesel.dato DESC

SELECT MIN(km) AS minikm, MAX(km) AS maxkm
FROM diesel
WHERE diesel.dato >= '$dx' AND userid = ".$_COOKIE['userid']."
ORDER BY diesel.dato DESC

他们三个都按我的预期行事,但我想必须有比在同一页面上有三个查询更好的方法

UNION是否可以去这里?我不知道为什么他们需要有相同数量的表:P?

编辑:这次我不需要用户ID和那个cookie。只是忘了删除它。我正在制作一个高分,并希望显示用户名,平均气体,公里驱动,升充满等。

2 个答案:

答案 0 :(得分:0)

以下是子查询的示例:

SELECT m.username,
    (
        SELECT SUM(liter) AS SumOfLiters
        FROM diesel
        WHERE diesel.dato >= '$dx'
        AND diesel.IDField = d.IDField
    ) AS TotalFuel
FROM members m
    JOIN diesel d ON d.userid = m.id
WHERE d.dato >= '$dx'

子查询(在括号中)返回一个可以分配给字段的值(在本例中为TotalFuel)。

答案 1 :(得分:-1)

而不是限制where子句中的所有内容,然后尝试将其全部结合,您可以使用您的顶级查询以及一些总和案例,例如

sum(case when userid = '.$_COOKIE['userid'].' then liter else 0 end)