2016-02-19 40 views
0

我正在比較SQL語句中的兩個日期時間。這是用PHP完成的。PHP SQL AJAX從某些日期時間之前獲取數據

$result=mysqli_query($con,"SELECT 
           * 
          FROM 
           join 
          WHERE 
           join_date <= '$last_join_dates' 
          ORDER BY 
           join_date DESC LIMIT 3 OFFSET 3"); 

$last_join_dates每次得到更新,所以我使用偏移保持在新的數據拉。但是,比較日期實際上並不奏效。

內部數據庫:結構join_date看起來像2015-10-24 13:30:22它是一個日期時間類型。

$last_join_dates我使用的是完全相同的格式2015-10-26 08:23:22

因爲這不起作用..我嘗試了以下轉換它們。

受審格式()的日期時間,但不工作:

$result=mysqli_query($con,"SELECT 
            * 
           FROM 
            join 
           WHERE 
            FORMAT(join_date, 'yyyyMMddhhmmss') <= FORMAT($last_join_dates, 'yyyyMMddhhmmss') 
           ORDER BY 
            join_date DESC LIMIT 3 OFFSET 3"); 

受審()轉換的日期時間,但似乎並沒有工作,要麼:

$result=mysqli_query($con,"SELECT 
            * 
           FROM 
            join 
           WHERE 
            REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(19), CONVERT(DATETIME, join_date, 112), 126), '-', ''), 'T', ''), ':', '') <= REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(19), CONVERT(DATETIME, $last_join_dates, 112), 126), '-', ''), 'T', ''), ':', '') 
           ORDER BY 
            join_date DESC LIMIT 3 OFFSET 3"); 

我不是肯定如何調試這..任何建議?

回答

0

#1孔,連接是一個MySQL的關鍵字,所以你需要要麼把背蜱周圍或更好,但打電話給你的表格別的

#2,這將不會是它不工作的原因,但你不應該使用這樣的字符串插值,它很容易受到SQL注入。相反,使用$ last_join_date作爲綁定變量:Bind variables in a mysql_query statement

The SQL you have above is correct, as seen below: 

mysql> select * from test order by the_date; 
+----+---------------------+ 
| id | the_date   | 
+----+---------------------+ 
| 1 | 2015-01-02 11:23:21 | 
| 2 | 2015-01-03 12:23:21 | 
| 3 | 2015-02-03 12:25:21 | 
| 4 | 2015-02-05 12:25:21 | 
| 5 | 2015-02-05 15:25:21 | 
| 6 | 2015-02-05 15:37:21 | 
| 7 | 2015-02-05 20:37:21 | 
| 8 | 2015-02-05 20:37:40 | 
| 9 | 2015-03-05 20:37:40 | 
| 10 | 2015-03-06 20:37:40 | 
+----+---------------------+ 
10 rows in set (0.00 sec) 

mysql> select * from test where the_date <= '2015-02-10 01:12:24' order by the_date desc limit 3, 3; 
+----+---------------------+ 
| id | the_date   | 
+----+---------------------+ 
| 5 | 2015-02-05 15:25:21 | 
| 4 | 2015-02-05 12:25:21 | 
| 3 | 2015-02-03 12:25:21 | 
+----+---------------------+ 
3 rows in set (0.00 sec) 

所以儘量命名錶別的東西或使用反引號「'」。也嘗試從mysql命令行運行查詢。也許你擁有的數據不是你的想法,但查詢工作正常。

+0

在PHP中使用字符串是很好的。只要它是有效的日期時間格式,Mysql就會自行轉換它。 – gimbel0893

+0

多數民衆贊成在有趣..有些原因,它沒有按預期工作壽。 – SQLNub

+0

我認爲錯誤來自使用AJAX ..我試圖追加更多的數據作爲用戶「滾動」到屏幕的底部。感謝您的意見...我會繼續深入研究。 – SQLNub

0

試試這個:

"SELECT * FROM join WHERE join_date <= '".date("Y-m-d H:i:s", strtotime($last_join_dates))."'ORDER BY join_date DESC LIMIT 3 OFFSET 3" 

它使用的strtotime $ last_join_dates轉換爲時間戳,然後將日期函數將其轉換爲正確的格式。

+0

謝謝。讓我試試 – SQLNub

+0

沒有更多的錯誤,但..由於某種原因,它沒有正確拉動日期。 硬編碼字符串:2015-10-24 13:30:50 在此日期之前不提取數據..即2015-10-23 23:22:50 – SQLNub

0

試試這個:

$result=mysqli_query($con,"SELECT 
          * 
         FROM 
          join 
         WHERE 
          UNIX_TIMESTAMP(join_date) <= '" . strtotime($last_join_dates) . "' 
         ORDER BY 
          join_date DESC LIMIT 3 OFFSET 3"); 
+0

謝謝。讓我試試這個 – SQLNub

+0

問題是由偏移引起的。它原本是工作的,只是抵消了顯示空值。謝謝你的建議! – SQLNub

相關問題