2010-07-26 100 views
0

我有一个简单的查询下面分组多个MySQL查询

SELECT id, name, email FROM users WHERE group_id = 1 

这个伟大的工程,直至上市,然后我开始添加LIKE查询,与OR语句结束链。

SELECT id, name, email FROM users 
WHERE group_id = 1 
    AND id LIKE $searchterm 
    OR name LIKE $searchterm 
    OR email LIKE $searchterm 

突然我WHERE子句不再维持,并用2或3“GROUP_ID”的结果被检索。

有没有办法将WHERE条款组合起来,以便始终维持它们,还是我错过了明显的东西?

回答

2

与查询处理第一次 - 你需要使用括号内为WHERE正确解释条款:

SELECT id, name, email 
    FROM users 
WHERE group_id = 1 
    AND ( id LIKE $searchterm 
     OR name LIKE $searchterm 
     OR email LIKE $searchterm) 

我会看看使用全文搜索(FTS),所以你可以使用:

SELECT id, name, email 
    FROM users 
WHERE group_id = 1 
    AND MATCH(id, name, email) AGAINST ($searchterm) 

记住,USERS表需要的MyISAM ...

+0

三江源非常多:) – Tim 2010-07-26 01:22:54

1

我假设你想

email FROM users WHERE group_id = 1 AND (id LIKE $searchterm OR name LIKE $searchterm OR email LIKE $searchterm) 

下面是MySQL数据库operator precedence

+0

欢呼声中,我已经收藏以备将来参考 – Tim 2010-07-26 01:24:26