2014-10-28 2 views
-5

У меня есть table_db как этотполучить данные из БД в диапазоне с использованием PHP

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 

, как я могу сделать?

+0

2014-01-08 ??? Ты уверен? – Strawberry

ответ

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 | 
+------------+------------+-------+ 

Обратите внимание, что это частное решение предполагает, что идентификаторы являются смежными.

+0

ЧУДЕСНЫЙ !!! СПАСИБО МНОГО! – user2120473

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']; 
+0

Я попробовал $ sql = "Выбрать * из fatture ORDER BY data ASC"; $ result = mysql_query ($ sql); for ($ i = 0; $ i user2120473

+0

Thats becouse 'mysql_query()' не возвращает массив. См. руководство PHP: http://php.net/manual/en/function.mysql-query.php и используйте 'mysql_fetch_array': http: //php.net/manual/en/function.mysql-fetch-array.php –

+1

Возможно, см. красивый большой розовый бит. – Strawberry

Смежные вопросы