使用php从DB获取数据作为范围

时间:2014-10-28 11:34:29

标签: php mysql

我有一个像这样的table_db

ID     DATA         PRICE
1      2014-01-01   10
2      2014-01-02   10
3      2014-01-03   10
4      2014-01-04   10
5      2014-01-01   20
6      2014-01-01   20
7      2014-01-01   30
8      2014-01-01   30

我喜欢一个给我输出的SQL查询

from 2014-01-01 to 2014-01-04 price is 10
from 2014-01-05 to 2014-01-06 price is 20
from 2014-01-08 to 2014-01-08 price is 30

我该怎么办?

2 个答案:

答案 0 :(得分:0)

按日期排序表(ASC),然后执行以下操作:

$result; //array with DB result
for($i = 0; $i<count($result); $i++)
    if(isset($result[$i+1])
        echo 'From' . $result [$i] ['data'] . ' to '. $result [$i+1] ['data'] . ' price is ' . $result [$i] ['price'];

答案 1 :(得分:0)

例如......

 DROP TABLE IF EXISTS my_table;

 CREATE TABLE my_table
 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
 ,date DATE NOT NULL
 ,price INT NOT NULL
 );

 INSERT INTO my_table VALUES
 (1      ,'2014-01-01',   10),
 (2      ,'2014-01-02',   10),
 (3      ,'2014-01-03',   10),
 (4      ,'2014-01-04',   10),
 (5      ,'2014-01-05',   20),
 (6      ,'2014-01-06',   20),
 (7      ,'2014-01-07',   10),
 (8      ,'2014-01-08',   10);


        SELECT a.date start
             , MIN(c.date) end
             , a.price
          FROM my_table a
          LEFT 
          JOIN my_table b 
            ON b.price = a.price
           AND b.id = a.id - 1
          LEFT 
          JOIN my_table c 
            ON c.price = a.price
           AND c.id >= a.id 
          LEFT 
          JOIN my_table d 
            ON d.price = a.price
           AND d.id = c.id + 1
         WHERE b.id IS NULL 
           AND c.id IS NOT NULL
           AND d.id IS NULL
         GROUP 
            BY a.id;
 +------------+------------+-------+
 | start      | end        | price |
 +------------+------------+-------+
 | 2014-01-01 | 2014-01-04 |    10 |
 | 2014-01-05 | 2014-01-06 |    20 |
 | 2014-01-07 | 2014-01-08 |    10 |
 +------------+------------+-------+

请注意,此特定解决方案假定ID是连续的。