繁体   English   中英

SQL查询 如果column =特定值,则返回全部

[英]Sql query. Return all if column = a particular value

我有一个关于在PHP项目中使用的SQL查询的小问题,更确切地说是我的Where语句。

假设我有一个名为tab的表。 该表有3列:id,名称和位置。 名称是varchar,位置是int。

我想做的是找到表的所有行,其中列的值等于变量的值(我们称它们为$ name和$ pos)。 所以通常我会做这样的事情:

private function getSqlQuery($name, $pos){
    return "SELECT *
            FROM tab
            WHERE name LIKE '%" . $name . "%' 
            AND position = " . $pos;
}

需要说明的是,变量$ pos不是严格的整数,可以是char或字符串,我可以控制要发送的参数值。

现在这是我需要做的事情:此查询还必须能够返回尊重必须返回第一个条件(名称= $ name)的每一行,而不管位置的值如何。

我也不能使用多个SQL查询,我不会详细说明为什么会花很长时间,但是我无法调用2个不同的查询。 我只能修改参数的值($ name和$ pos)。

我需要找到某种通配符,一个要发送给$ pos的值,以便它将返回任何内容。 使用LIKE'%%'作为名称有效,但是我还没有找到一个int值。

我为我的英语不好而道歉。

我从来没有使用过这样的东西,但是从理论上讲,我认为它可以工作:

您可以在$ var中使用传递特定字符串,并在WHERE子句中使用CASE进行检查。 如果是该字符串,则将position与position进行比较,这将为您提供第一次验证的结果:

 SELECT *
 FROM tab
 WHERE name LIKE '%" . $name . "%' 
 AND position = CASE WHEN " .$var. " = 'IGNORE' THEN position ELSE " .$var. "END;

首先,我认为$var应该是$pos

        SELECT *
        FROM tab
        WHERE name LIKE '%" . $name . "%' AND
              position = " . $pos;

一个典型的条件是,如果您为pos传递了一个特殊值,那么您将返回所有与name匹配的行。 假设pos必须始终为非负数,则可以使用-1:

        SELECT *
        FROM tab
        WHERE name LIKE '%" . $name . "%' AND
              (position = " . $pos . " or " . $pos . " = -1)";

唯一的问题是可以用于比较的超出范围的值。 如果没有,则可以将$pos更改$pos字符串,然后将空字符串用于此目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM