我有一个可以在表中执行完整查询的数据库。每个用户都有会员身份,尽管并非所有这些状态都是真实会员身份。在此查询中,我必须获得具有真实成员资格状态的所有用户。我也有一个过滤器,用于过滤用户的工作分配,如“PR Manager”。首先,我检查是否有任何过滤器:
if($filter != 0)
{
$filter = "Assignment NOT LIKE '$filter'";
}
else
{
$filter = "1";
}
接下来,我搜索所有真实会员值:
$member_ids = "";
while($get = mysql_fetch_array($query))
{
if($get["IsMember"] == 1)
{
$id = $get["ID"];
if($member_ids == ""){ $member_ids = "'$id'"; } else { $member_ids .= " OR '$id'"; }
}
}
从这两个生成的参数中,我构建了我的SQL查询:
$query = mysql_query("SELECT * FROM vilma_contact WHERE Membership LIKE $member_ids AND $filter");
输出如下:
SELECT * FROM vilma_contact WHERE Membership LIKE '3' OR '2' AND Assignment NOT LIKE '10'
现在出现问题。它不能在PHP中运行,但是如果我将它复制到phpmyadmin,它会显示没有错误并显示正确的行。我从来没有遇到过这样的事情,如果有人可以提供帮助我真的很感激。
答案 0 :(得分:1)
SELECT *
FROM vilma_contact
WHERE
Membership LIKE '3' OR '2'
AND Assignment NOT LIKE '10'
看起来好像应该是错误的SQL
SELECT *
FROM vilma_contact
WHERE
(Membership LIKE '3' OR Membership LIKE '2') AND
Assignment NOT LIKE '10'
你可能需要使用=所以进一步的改变是
SELECT *
FROM vilma_contact
WHERE
(Membership = '3' OR Membership = '2') AND
Assignment != '10';
另外尝试添加“;”最后
答案 1 :(得分:0)
您的WHERE子句的格式错误。通常,当使用LIKE
时,字符串中将包含通配符(%
或_
)的组合,以实际指示您要匹配的内容。如果你试图匹配那些确切的字符串,你需要使用相同的,所以可能是这样的:
SELECT *
FROM vilma_contact
WHERE
(Membership = '3' OR Membership = '2')
AND Assignment <> '10'
如果您真的想要匹配子字符串,那么您的查询可能会像
一样SELECT *
FROM vilma_contact
WHERE
(Membership LIKE '%3%' OR Membership LIKE '%2%')
AND Assignment NOT LIKE '%10%'
答案 2 :(得分:0)
我不确定您的代码序列是否正确
$query = mysql_query("SELECT * FROM vilma_contact WHERE Membership LIKE $member_ids AND $filter");
是AFTER
while($get = mysql_fetch_array($query))
错误似乎表明在while之前没有查询。那么也许您可以向我们展示传递给while
的查询?
正如我在评论中提到的,您需要修复查询部分Membership LIKE '3' OR '2'