2014-02-20 57 views
0

好像我努力學習一切在一次:PHP,JS,現在的MySQL查詢,所以其花費很長的時間去擅長甚至一個...我有一個數據庫的測試如下所示。我希望用戶在給定的日期範圍內查看所有測試(包括預測試和後測)。以下是我嘗試(並失敗):MySQL的複雜與和或查詢和

$query = $pdo->prepare("SELECT * 
FROM `starprepost` 
WHERE (`pretestdate` >= ? AND `pretestdate` <= ?) 
OR (`posttestdate` >= ? AND `posttestdate <=?) 
AND `site` = '". $_POST['fromlocation'] ."' 
ORDER BY `pretestdate`, `posttestdate` ASC"); 
$query->execute(array($datebeginning, $dateending, $datebeginning, $dateending)); 

這是模式。此外,任何有關如何構建好查詢的參考,都會受到讚賞。

CREATE TABLE `starprepost` (
    `firstname` text, 
    `lastname` text, 
    `studentnumber` text, 
    `site` text, 
    `pretestdate` date DEFAULT NULL, 
    `posttestdate` date DEFAULT NULL, 
    `q1` text, 
    `q2` text, 
    `q3` text, 
    `q4` text, 
    `q5` text, 
    `q6` text, 
    `q7` text, 
`id` int(6) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=latin1 
+0

什麼是你的問題? –

+0

你會得到什麼錯誤? – ponciste

+0

我想這個問題是我怎麼能獲得日期範圍內的所有記錄不論是售前檢驗(必須在pretestdate的日期,而不是posttestdate),或後測試(必須在pretestdate沒有日期,但一在posttestdate中)。 –

回答

1

嘗試像

$query = $pdo->prepare("SELECT * 
FROM `starprepost` 
WHERE ((`pretestdate` >= ? AND `pretestdate` <= ?) OR `pretestdate`= NULL) 
AND ((`posttestdate` >= ? AND `posttestdate` <=?) OR `posttestdate` = NULL ) 
AND `site` = '". $_POST['fromlocation'] ."' 
ORDER BY `pretestdate`, `posttestdate` ASC"); 
$query->execute(array($datebeginning, $dateending, $datebeginning, $dateending)); 
+0

沒有錯誤,也沒有任何記錄返回,即使我選擇了一個廣泛的日期範圍。還必須修復第4行的撇號(缺失)。 –