2012-02-20 106 views
-1

我有一个表名lcMovimientos和我需要的是一个查询在那里我得到的结果cantidadMovimientos数量的总和,但我想每一行是由的一天一周只来总结的日子本周的,所以研究后,我发现这样做是创造为期一周的天新表的最好办法,所以我现在有一个名为diasSemana空行的MySQL查询,但使用WHERE

SELECT * FROM diasSemana 
+-----------+ 
| diaSemana | 
+-----------+ 
|   0 | 
|   1 | 
|   2 | 
|   3 | 
|   4 | 
|   5 | 
|   6 | 
+-----------+ 

表和一个名为lcMovimientos的表

mysql> DESCRIBE lcMovimientos; 
+-----------------------+---------------+------+-----+---------+----------------+ 
| Field     | Type   | Null | Key | Default | Extra   | 
+-----------------------+---------------+------+-----+---------+----------------+ 
| idMovimiento   | int(11)  | NO | PRI | NULL | auto_increment | 
| idUsuario    | int(11)  | YES |  | NULL |    | 
| tipoMovimiento  | tinyint(4) | YES |  | NULL |    | 
| cantidadMovimiento | decimal(20,2) | YES |  | NULL |    | 
| idCategoria   | int(11)  | YES |  | NULL |    | 
| fechaMovimiento  | date   | YES |  | NULL |    | 
| idCuenta    | int(11)  | YES |  | NULL |    | 
| descripcionMovimiento | varchar(255) | YES |  | NULL |    | 
| etiquetasMovimiento | varchar(255) | YES |  | NULL |    | 
+-----------------------+---------------+------+-----+---------+----------------+ 

我可以做一个查询,我在哪里得到该cantidadMovimiento的总和,但是当我添加where子句,所以我只能从当前周的结果,我不再按天FO一周拿到行,所以这里是我的查询:

mysql> SELECT SUM(cantidadMovimiento) , diaSemana, fechaMovimiento                         -> FROM diasSemana 
    -> LEFT JOIN lcMovimientos ON diaSemana = WEEKDAY(fechaMovimiento) 
    -> GROUP BY diaSemana; 
+---------------------------+-----------+-----------------+ 
| SUM(cantidadMovimiento) | diaSemana | fechaMovimiento | 
+---------------------------+-----------+-----------------+ 
|     280.00 |   0 | 2012-02-20  | 
|     800.00 |   1 | 2012-02-21  | 
|     7000.00 |   2 | 2012-02-29  | 
|      NULL |   3 | NULL   | 
|      NULL |   4 | NULL   | 
|     -3300.78 |   5 | 2012-02-18  | 
|     600.00 |   6 | 2012-02-26  | 
+---------------------------+-----------+-----------------+ 

,当我使用WHERE子句:

mysql> SELECT SUM(cantidadMovimiento) , diaSemana, fechaMovimiento 
    -> FROM diasSemana 
    -> LEFT JOIN lcMovimientos ON diaSemana = WEEKDAY(fechaMovimiento) 
    -> WHERE WEEK(fechaMovimiento, 1) = WEEK(CURRENT_DATE, 1) 
    -> GROUP BY diaSemana; 
+---------------------------+-----------+-----------------+ 
| SUM(cantidadMovimiento) | diaSemana | fechaMovimiento | 
+---------------------------+-----------+-----------------+ 
|     265.00 |   0 | 2012-02-20  | 
|     800.00 |   1 | 2012-02-21  | 
|     600.00 |   6 | 2012-02-26  | 
+---------------------------+-----------+-----------------+ 

所以我的问题是如何让我的查询,我会使用到哪只得到当前一周的日期在一周的某一天得到的结果???提前感谢你!

+0

这不是一个PHP的问题。 – Vitamin 2012-02-20 19:41:27

+2

**这是因为你聚集错了。** MySQL将返回每组随机'fechaMovimiento'值,所以当你在它过滤你得到随机的结果。 – JNK 2012-02-20 19:42:54

回答

0

试试这个

SELECT 
    COALESCE(SUM(cantidadMovimiento),0) AS cantidadMovimiento, 
    diaSemana, 
    DATE_ADD(DATE(NOW()), INTERVAL diaSemana-WEEKDAY(NOW()) DAY) AS weekday 
FROM diasSemana 
LEFT JOIN lcMovimientos 
    ON diaSemana = WEEKDAY(fechaMovimiento) 
    AND WEEK(fechaMovimiento) = WEEK(NOW()) AND YEAR(fechaMovimiento) = YEAR(NOW()) 
GROUP BY diaSemana; 
+0

感谢您的快速反应,但尝试这种将总结所有cantidadMovimiento甚至 – 2012-02-20 20:05:18

+0

你用WHERE周(fechaMovimiento)= WEEK尝试(NOW())的那些不在当前周和年值(fechaMovimiento )= YEAR(NOW())语句? – silly 2012-02-20 20:09:28

+0

以下是查询给了我 + -------------------- + ----------- + ------- ----- + | cantidadMovimiento | diaSemana |平日| + -------------------- + ----------- + ------------ + | 265.00 | 0 | 2012-02-20 | | 800.00 | 1 | 2012-02-21 | + -------------------- + ----------- + ------------ +只有它给我的天,我有不包括周日 – 2012-02-20 20:22:53