0

我有一个可以在表中进行完整查询的数据库。每个用户都有一个会员身份,尽管并非所有这些身份都是真正的会员身份。在此查询中,我必须获取所有具有真实会员身份的用户。我也有一个过滤器,用于过滤用户的工作分配,例如“公关经理”。首先,我检查是否有任何过滤器:

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,它不会显示任何错误并显示正确的行。我从来没有遇到过这样的事情,如果有人可以提供帮助,我将不胜感激。

4

3 回答 3

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';

也尝试添加“;” 在最后

于 2012-09-19T19:34:05.007 回答
0

您的 WHERE 子句确实格式错误。通常,当使用LIKEone 时,字符串中会包含通配符 (%_) 的组合,以实际指示您要匹配的内容。如果你想匹配那些你需要使用 equal 的确切字符串,那么可能是这样的:

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%'
于 2012-09-19T19:37:02.957 回答
0

我不确定您的代码顺序是否正确

$query = mysql_query("SELECT * FROM vilma_contact WHERE Membership LIKE $member_ids AND $filter");

是之后

while($get = mysql_fetch_array($query))

该错误似乎表明在此之前没有查询。因此,也许您可​​以向我们展示正在传递给while?

同样正如我在评论中提到的,您需要修复查询部分Membership LIKE '3' OR '2'

于 2012-09-19T19:43:46.390 回答