2016-10-13 18 views
1

phpmyadmin sqlで完全に機能するクエリがありましたが、laravel 5でクエリを実行しようとすると、Laravel 5 DB :: selectでクエリを実行する際の問題

ここ
public function getCheckDueCurrentMonth() 
    { 
     $query = "SELECT * FROM history_card WHERE DUE_CAP_CHECK_DATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY) WHERE MAX(HISTORY_ID) GROUP BY SERIAL_NUMBER ORDER BY DUE_CAP_CHECK_DATE DESC"; 

     $results = DB::select(DB::raw($query)); 
     return $results; 


    } 

はエラーです:

QueryException in Connection.php line 761: 
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL 
syntax; 
check the manual that corresponds to your MariaDB server version for the right syntax to 
use near 
'WHERE MAX(HISTORY_ID) GROUP BY SERIAL_NUMBER ORDER BY DUE_CAP_CHECK_DATE DESC)' 
at line 1 (SQL: (SELECT * FROM history_card WHERE DUE_CAP_CHECK_DATE BETWEEN NOW() 
AND DATE_ADD(NOW(), INTERVAL 30 DAY) WHERE MAX(HISTORY_ID) 
GROUP BY SERIAL_NUMBER ORDER BY DUE_CAP_CHECK_DATE DESC)) 
+0

にそれを回すことが判明しますどこに。秒をAND/ORに変更して比較するものを与えます。 – aynber

答えて

0

使用この

public function getCheckDueCurrentMonth() 
     { 
      $query = "SELECT * FROM history_card WHERE DUE_CAP_CHECK_DATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY) WHERE MAX(HISTORY_ID) GROUP BY SERIAL_NUMBER ORDER BY DUE_CAP_CHECK_DATE DESC"; 

      $results = DB::Raw($query); 
      return $results; 


     } 
0

まず、あなたは、クエリがあります違う。私のコメントで言及したように、クエリは1つだけを持つことができます。 AND、またはORで複数の句を結合する。

$query = "SELECT * FROM history_card 
    WHERE DUE_CAP_CHECK_DATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)  
    AND MAX(HISTORY_ID) 
    GROUP BY SERIAL_NUMBER 
    ORDER BY DUE_CAP_CHECK_DATE DESC"; 

私はあなたが比較にそれを追加する必要があるので、あなただけの最後のhistory_idをしたい推測している:

$query = "SELECT * FROM history_card 
    WHERE DUE_CAP_CHECK_DATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY) 
    AND history_id = MAX(HISTORY_ID) 
    GROUP BY SERIAL_NUMBER 
    ORDER BY DUE_CAP_CHECK_DATE DESC"; 

DB ::あなたは、列の比較やMySQLをやっているときの生は、通常、 で機能するので、ここにドロップできます。

$results = DB::select($query); 
+0

'SELECT * FROM history_card ここからDUE_CAP_CHECK_DATE NOW()とDATE_ADD(NOW()、30日間) AND history_id = MAX(HISTORY_ID)'このクエリでエラーが表示されます: –

0

それはあなたがそれを無効にしたい場合、MySQLでlaravel 5用途「strictモード」は、MySQLではdatabase.phpでに行く'strict' => trueを見つけて、あなただけのいずれかが必要'strict' => false

関連する問題