已解决:国家和操作系统表中的数据类型设置为 VARCHAR,因此在我的位置中,我将 = 0 更改为 = '0'。感谢raina77ow 指出这一点!欣赏它。
我不太确定如何编写此查询。基本上,我将有一个包含两列(OS 和 country_code)的表——还有更多列,但这些是有条件的。这些将被设置为全部或特定的 0,以逗号分隔。
现在,如果 OS 和 country_code = 0,或者如果它们包含匹配数据(用逗号分隔),我想要实现的是从表中提取数据。
然后,我有一个时间专栏。我想选择时间大于时间列的行,除非列 time_t 设置为 false,在这种情况下,这无关紧要。
我希望我解释得对吗?
到目前为止,这就是我所拥有的:
$get = $db->prepare("SELECT * FROM commands
WHERE country_code = 0 OR country_code LIKE :country_code
AND OS = 0 OR OS LIKE :OS
AND IF (time_t = 1, expiry > NOW())
");
$get->execute(array(
':country_code' => "%{$data['country_code']}%",
':OS' => "%{$data['OS']}%"
));
编辑:这是我现在使用的代码,但我似乎仍然无法让操作系统和 Country_code 部分正常工作:
$get = $db->prepare("SELECT * FROM commands
WHERE (country_code = 0 OR country_code LIKE :country_code)
AND (OS = 0 OR OS LIKE :OS)
AND (time_t <> 1 OR expiry > NOW())
");
$get->execute(array(
':country_code' => "%{$data['country_code']}%",
':OS' => "%{$data['OS']}%"
));
发送到数据库的数据将是: OS => Windows 7 country_code => GB 仅发送一个,不超过一个。我现在遇到的问题是,它适用于操作系统和时间,但不适用于国家。我什至尝试了一个原始查询,当表中的数据是“FR,SA”并且我做了 LIKE '%GB%' 它仍然返回了该行