Mysql WHERE子句等于所有元素

时间:2013-12-08 18:55:48

标签: php html mysql sql

我正在表单中进行查询,其中在选择中选择元素类型。

我的查询类似于:

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

谢谢!

5 个答案:

答案 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
    )

Full featured variant with like