如何从同一mysql表中另一行的值中减去一行中的值

时间:2011-08-02 22:28:46

标签: php mysql

我在php文件中有以下查询:

$query = "SELECT 
    a.aurl as al,
    (a.lttotals 
       - 
       ( SELECT b.lttotals 
         FROM stats b 
         WHERE ltdate='$newdate'
         AND b.aurl=a.aurl
       )
    ) as tt,
    lttotals
 FROM stats a 
 WHERE ltdate='$date'
 ORDER BY lttotals DESC 
 LIMIT 20";

这非常慢,如果我将限制更改为20以上,mysql就会消失。 ;)

基本上我需要做的是从一行中的某些列获取值并从另一行中减去它们。

有没有更好的方法来使用我现在所做的事情来做我想做的事情,还是应该重新构建我存储数据的方式?

2 个答案:

答案 0 :(得分:1)

SELECT  a.aurl AS a1,
        a.lttotals
        a.lttotals - b.lttotals
FROM    stats a
JOIN    stats b
ON      b.aurl = a.aurl
        AND b.ltdate = '$newdate'
WHERE   a.ltdate = '$date'
ORDER BY
        a.lttotals DESC
LIMIT 20

创建以下索引:

stats (ltdate, lttotals)
stats (ltdate, aurl)

让它快速工作。

答案 1 :(得分:0)

SELECT a.url AS al,
   (a.lttotals - b.lttotals) AS tt,
   a.lttotals
FROM stats a, stats b
WHERE a.ltdate='$date' AND b.ltdate='$newdate' AND a.url = b.url
ORDER BY a.lttotals DESC