我有一个关于我在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值。
我为我可怜的英语道歉。
答案 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
更改为字符串,然后将空字符串用于此目的。