我想选择mysql数据库表的整个列,但仅限于未设置值的情况。
对于mysqli,我会将值设置为等于列的名称而不使其成为字符串,但是在PDO查询中它不起作用?
我有以下内容:
$stmt = $this->_db->prepare('SELECT BookDate, DepDate, BkngVal, Channel, Market, Region, MappedType, calc_ExpMargin FROM sales
WHERE MappedType = :tailormade AND Region = :region AND MappedType = :type AND Channel = :channel AND BookDate <= :firstDate AND BookDate >= :secondDate');
$stmt->execute(array(
'tailormade' => $tailormade,
'region' => $region,
'type' => $type,
'channel' => $channel,
'firstDate' => $date1,
'secondDate' => $date2
));
现在让我们说除了$ region之外都设置了变量。如果是这种情况,我想用搜索整个区域列的区域选项搜索所有选项。
这可能吗?
我希望这个问题有道理。
答案 0 :(得分:0)
据我了解,您有时想要从查询中省略搜索条件,您可以这样做:
SELECT
BookDate,
DepDate,
BkngVal,
Channel,
Market,
Region,
MappedType,
calc_ExpMargin
FROM
sales
WHERE (MappedType = :tailormade OR :tailormade IS NULL)
AND (Region = :region OR :region IS NULL)
AND (Channel = :channel OR :region IS NULL)
AND (BookDate <= :firstDate OR :firstDate IS NULL)
AND (BookDate >= :secondDate OR :secondDate IS NULL)
此外,您使用了MappedType
两次,这在使用AND
子句时会出现问题,因为一列不能同时具有两个不同的值。所以我删除了一个。无论如何,我举例说明了如何做到这一点。
还要记住,如果要省略它,请将任何参数设置为null
- 这可以是给定示例的函数调用:
getDataUK('FIT', NULL, 'TRADE', 'UK', '2016-01-01', '2016-01-07');