2014-10-15 2 views
0

Ниже мой Laravel запрос к SELCT данных ...Laravel база данных, где состояние

$mydata = DB::table('History') 
    ->where('Start','>=',$Start) 
    ->andwhere('Start','<=',$End) 
    ->select()->get(); 

Давайте предположим, что в базе данных у нас есть данные из 3-10 (начало) ..... пользователь вводит

1) случай $ start = 2; $ end = 10; 2) кейс $ start = 4; $ end = 10;

с помощью запроса я получаю данные между 3-10 для 1) случае ...

В первом случае, я не хочу, чтобы отобразить какие-либо данные, во втором случае я хочу, чтобы отобразить данные между 4- 10 только ... состояние должно быть что-то вроде

start=data<=end не start<=data<=end

я также пытался ...

$mydata = DB::table('History') 
    ->where('Start',$Start) 
    ->andwhere('Start','<=',$End) 
    ->select()->get(); 

, но до сих пор не исправлены любые способы исправить этот laravel?

ответ

1

Ваш вопрос не имеет ничего общего с Ларавелем. Чтобы достичь своей цели, вы должны исследовать свои данные в своем запросе до фильтрации набора результатов. Ваш запрос в формате обычного SQL может выглядеть так:

SELECT h.* 
FROM history h JOIN 
(
    SELECT a.start, MIN(h.start) min_start, a.end, MAX(h.start) max_end 
    FROM history h JOIN (SELECT 2 start, 10 end) a 
     ON h.start BETWEEN a.start AND a.end 
) q 
    ON h.start BETWEEN q.start AND q.end 
    AND q.start >= q.min_start AND q.end <= q.max_end 

Этот конкретный запрос вернет пустой набор результатов.

Если изменить (SELECT 2 start, 10 end) a к (SELECT 4 start, 10 end) a вы получите

 
+-------+ 
| start | 
+-------+ 
|  4 | 
|  5 | 
|  6 | 
|  7 | 
|  8 | 
|  9 | 
| 10 | 
+-------+ 
Смежные вопросы