我有一个可以在表中执行完整查询的数据库。每个用户都有一个成员身份,尽管并非每个状态都是真正的会员状态。在此查询中,我必须获取具有真实成员资格状态的所有用户。我也有一个过滤器,可以过滤用户的作业助手,例如"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,它不会显示任何错误并显示正确的行。我从未遇到过这样的事情,如果有人可以提供帮助,我将不胜感激。
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';
还可以尝试在末尾添加";"
您的 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%'
我不确定您的代码顺序是否正确
$query = mysql_query("SELECT * FROM vilma_contact WHERE Membership LIKE $member_ids AND $filter");
是之后
while($get = mysql_fetch_array($query))
该错误似乎表明在 while 之前没有查询。因此,也许您可以向我们展示传递给while
的查询?
另外,正如我在评论中提到的,您需要修复查询部分Membership LIKE '3' OR '2'