似乎我正在尝试一次学习所有内容:PHP,JS,以及现在的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 :(得分: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));