SQL查询。如果column =特定值,则返回all

时间:2013-11-30 23:25:04

标签: php mysql sql where wildcard

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

所以我想说我有一个名为tab的表。该表有3列:id,name和position。 name是varchar,position是int。

我要做的是找到表的所有行,其中colums的值等于变量的值(让我们称之为$ name和$ pos)。所以,我只是做一些像这样的事情:

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

为了澄清,变量$ pos不是严格的整数,可以是char或字符串,我可以控制在参数中发送什么值。

现在这里是我需要做的事情:这个查询必须能够返回每个必须返回第一个条件(name = $ name)的行,而不管位置的值是什么。

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

我需要找一些通配符,一个值发送到$ pos所以它会返回任何东西。使用LIKE'%%'表示名称有效,但我还没有找到一个int值。

我为我可怜的英语道歉。

2 个答案:

答案 0 :(得分:0)

我从未使用过这样的东西,但理论上我认为它可以起作用:

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

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

答案 1 :(得分:0)

首先,我认为$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更改为字符串,然后将空字符串用于此目的。