我正在表单中进行查询,其中在选择中选择元素类型。
我的查询类似于:
SELECT * from table WHERE element = $selection.
现在,选择中的一个选项是show all。如何进行如下查询:
SELECT * from table WHERE element = ALL?
我知道我可以对其进行验证,并针对每种情况使用两个不同的查询,
选择元素:
SELECT * from table WHERE element = $selection
如果$selection == 'all'
,则使用:
SELECT * from table
但这仅仅是一个例子,在我的情况下,我必须做太多查询,我可以这样做,但我想事先检查一下,如果我只能使用 ONE 查询两种情况。
这是我的代码:
function displayElements($sec,$ele,$from,$to){ // sec and ele could be set to 'ALL'
mysql_connect("#", "#", "#") or die(mysql_error());
mysql_select_db("#") or die(mysql_error());
mysql_query("SET NAMES 'utf8'");
//queries
if($ele == 'Box'){
$resultado = mysql_query("SELECT * FROM elementos WHERE seccion = '$sec' AND elemento LIKE '%Box:%' AND fecha BETWEEN '$from' AND '$to' ORDER BY fecha ASC");
}
else{
$resultado = mysql_query("SELECT * FROM elementos WHERE seccion = '$sec' AND elemento = '$ele' AND fecha BETWEEN '$from' AND '$to' ORDER BY fecha ASC");
}
if (!$resultado) {
echo "No se pudo ejecutar con exito la consulta ($sql) en la BD: " . mysql_error();
exit;
}
if (mysql_num_rows($resultado) == 0) {
echo "nada para mostrar.";
exit;
}..blablabla
谢谢!
答案 0 :(得分:1)
为什么使用两个查询(下面的伪代码可能会有帮助)?
q = "select * from table";
q += (a == "ALL") ? "" : " where element in...";
答案 1 :(得分:0)
如果您想获得表格中的所有元素SELECT * from table
没有任何WHERE ...
答案 2 :(得分:0)
我宁愿在你的情况下使用两个不同的查询。但是,如果有5个选择框,每个选择框可能包含一个特定的字符串,或者“没有选择”,我会从“语法糖”语句开始,如
select * from table where 1=1
然后,对于每个选择框,我添加一个像
这样的字符串and columnX = 'valuex'
声明。无论如何,1 = 1将被优化器抛弃,这样可以省去一些麻烦,检查我是否必须在添加约束时使用“where”或“and”。
警告:在现实生活环境中使用它会打开SQL inhjection代码。除非你正在学习,你真正应该做的是添加
and columnX = ?
到查询字符串,将valuex附加到数组,然后在启动select时使用该数组绑定变量。
答案 3 :(得分:0)
如果您可以将element
字段本身传递给您的查询,那么
WHEN element = element
NULL
之外,不会过滤掉任何内容,但任何相等检查都会过滤掉NULL,因为 NULL不等于NULL 。
答案 4 :(得分:0)
你可以把SELECT放到你的位置:
select * from seldat,mydat where element=(
select
case
when query_element='ALL' then element
else query_element
end
)
SQL Fiddle for use without 'like'
仅限学术用途的编辑
create table mydat (
field1 varchar(128),
element varchar(128)
);
create table seldat (
query_element varchar(128)
);
insert into mydat values
('field A', 'basic element'),
('field B', 'cpp element'),
('filed C', 'cpp file'),
(null,null)
;
insert into seldat values
('ALL'),
('basic element'),
('cpp%'),
('cpp element'),
('cpp file')
然后以下SQL工作:
select * from seldat,mydat where element in (
select
case
when query_element='ALL' then element
else query_element
end
union
select element from mydat
where element like query_element
)