2016-09-27 69 views
0

有一個MySQL 從MySQL排除排年紀比今天

+----+-------+------+------------+---------+ 
| id | name | type | date | deleted | 
+----+-------+------+------------+---------+ 
| 1 | nameA | 1 | 2016:10:15 | 1 | 
+----+-------+------+------------+---------+ 
| 2 | nameB | 1 | 2016:10:20 | 0 | 
+----+-------+------+------------+---------+ 
| 3 | nameC | 2 | 2016:09:26 | 0 | 
+----+-------+------+------------+---------+ 
| 4 | nameD | 2 | 2016:09:30 | 0 | 
+----+-------+------+------------+---------+ 
| 5 | nameE | 3 | 2016:09:26 | 0 | 
+----+-------+------+------------+---------+ 

我想SELECT一切,除非刪除= 1,除非類型= 2的日期比今天更舊(2016: 09:27)。所以,我嘗試使用NOT IN,但我做的方式不包括還可以鍵入= 3具有比今天更舊的日期:

$currentDate = date("Y:m:d"); 
$sql = "SELECT * FROM table WHERE deleted != 1 AND date NOT IN  
    (SELECT date FROM table WHERE type = 2 AND date < '$currentDate') ORDER BY date"; 

任何幫助嗎?謝謝!

回答

0

試試這樣說:

$sql = "SELECT * FROM table WHERE deleted = 0 AND NOT (type = 2 AND date < DATE(NOW())) ORDER BY date"; 

我不認爲你需要在PHP中定義的currentdate無論是。

0

使用Str_to_date

SELECT * FROM table 
WHERE deleted != 1 
AND date NOT IN  
(SELECT date FROM table 
WHERE type = 2 AND str_to_date(date, '%Y:%m:%d') < curdate()) 
ORDER BY str_to_date(date", '%Y:%m:%d') 
0

您的數據庫結構的根本錯誤。 如果要有效比較日期和時間,則需要使用適當的數據類型DATETIME。不要使用字符串 - MySQL無法知道如何排序結果或者更低或更高的結果。

類型更改爲DATETIME和表格,如:

WHERE datetime_column < DATE_SUB(CURDATE(), INTERVAL 1 DAY) 

如果你不希望在所有使用時間,使用DATE代替DATETIME

0

表結構:

CREATE TABLE `example` (
`id` int(11) DEFAULT NULL, 
`name` varchar(30) DEFAULT NULL, 
`type` int(11) DEFAULT NULL, 
`date` date DEFAULT NULL, 
`deleted` int(11) DEFAULT NULL 
) 

/*Data for the table `example` */ 

insert into `example`(`id`,`name`,`type`,`date`,`deleted`) values (1,'nameA',1,'2016-10-15',1),(2,'nameB',1,'2016-10-20',0),(3,'nameC',2,'2016-09-26',0),(4,'nameD',2,'2016-09-30',0),(5,'nameE',3,'2016-09-28',0),(6,'nameE',3,'2016-09-26',0); 

所需的查詢:

SELECT * FROM EXAMPLE WHERE (deleted != 1 AND id NOT IN (SELECT id FROM EXAMPLE WHERE (TYPE = 2 AND DATE < CURDATE()))) ORDER BY DATE 
+0

謝謝,但在這種情況下,行與類型= 2和日期**比現在**更新將被排除在外太。 – mindSurf

+0

你提到比今天更早,所以今天不比今天更早。檢查修改後的查詢,現在它應該也適用於今天。 –

+0

這不是重點。好的,那麼id = 4的行會被打印出來嗎? – mindSurf