Mysql – Why this query returns rows that I don’t want to be there

MySQLqueryselect

I'm trying to running this query:

SELECT * 
FROM 
    (`default_users`) 
    LEFT JOIN `default_profiles` ON `default_profiles`.`user_id` = `default_users`.`id` 
WHERE 
    `default_users`.`group_id` = '3' 
    OR `default_users`.`group_id` = '4' 
    OR `default_users`.`group_id` = '5' 
    AND `default_users`.`email` LIKE '%polar%' 
    OR `default_users`.`username` LIKE '%polar%' 
ORDER BY `default_users`.`id` DESC

But get unwanted results and don't know the cause and by unwanted results means webmaster which I think isn like %polar%. Here are some sample data for testing http://pastebin.com/Fyx0TcGY, any advice?

Best Answer

I optimized your query. I use IN instead OR because your point to the same field default_users.group_id and I added the brackets after the AND with (default_users.email LIKE '%polar%' OR default_users.username LIKE '%polar%'). You can use || instead OR (works the same).

SELECT 
    default_users.*,default_profiles.* 
FROM test.default_users 
LEFT JOIN default_profiles  ON (default_profiles.user_id = default_users.id)
WHERE default_users.group_id IN (3,4,5)
    AND (default_users.email LIKE '%polar%' 
    OR default_users.username LIKE '%polar%')
ORDER BY default_users.id DESC;