2012-02-20 98 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