Php Sql查询。如果列=特定值,则返回all

Php Sql查询。如果列=特定值,则返回all,php,mysql,sql,where,wildcard,Php,Mysql,Sql,Where,Wildcard,我有一个关于我在PHP项目中使用的SQL查询的小问题,更确切地说是我的Where语句 假设我有一个名为tab的表。此表有3列:id、名称和位置。name是varchar,position是int 我试图做的是找到表中列的值等于变量值的所有行(让我们称它们为$name和$pos)。所以通常我会这样做: private function getSqlQuery($name, $pos){ return "SELECT * FROM tab WH

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

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

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

private function getSqlQuery($name, $pos){
    return "SELECT *
            FROM tab
            WHERE name LIKE '%" . $name . "%' 
            AND position = " . $pos;
}
为了澄清,变量$pos不是严格意义上的整数,可以是字符或字符串,我可以控制在参数中发送什么值

现在我需要做的是:这个查询必须能够返回符合第一个条件的每一行(name=$name),不管position的值是多少

我也不能使用多个SQL查询,我不会详细说明原因,因为这会花费太长时间,但我不能调用两个不同的查询。我只能修改参数($name和$pos)的值

我需要找到某种通配符,一个发送到$pos的值,以便它返回任何内容。对name使用“%”之类的方法是可行的,但我还没有找到一个适合int值的方法


我为我糟糕的英语道歉。

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

您可以使用$var传递一个特定的字符串,并在WHERE子句中使用CASE检查它。如果您将position与position进行比较的字符串,则会给出第一次验证的结果:

选择*
从选项卡
其中名称类似“%”“$name.”
和位置=当“$var.”为“忽略”时的情况,然后放置其他“$var.”结束;

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

        SELECT *
        FROM tab
        WHERE name LIKE '%" . $name . "%' AND
              position = " . $pos;
一个典型的情况是,若您为pos传递一个特殊值,那个么您将返回所有匹配名称的行。假设pos必须始终为非负数,则可以使用-1:

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

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

我认为您必须澄清您的问题。预期的结果是什么?举一些例子。我想我们大多数人都想知道,如果值不重要,为什么不完全删除position列上的谓词?既然选择查询1和查询2是我认为最简单的解决方案,为什么你说你不能这样做?这没有任何意义。第二个子句未使用,第一个子句捕获所有行。