So what you want is everything from your users table, everything from your useroptions table, and every thing from the usergroups table, but you want to match more than 1 row from the usergroups table, is this correct?
Here is what I see of your data:
Users:
--------
user_id int not null
name varchar
UserOptions:
----------------
userOption_id int not null
user_id int not null
option1 bool
option2 bool
UserGroups:
----------------
userGroup_id int not null
user_id int not null
name varchar
The data you have in these tables is a single user entry, a single useroption entry for your user, and 2 usergroup entries for your user:
Users:
--------
user_id - 1
name - john doe
UserOptions:
-----------------
useroption_id - 1
user_id - 1
option1 - true
option2 - false
UserGroups:
----------------
usergroup_id - 1
user_id - 1
name - group 1
usergroup_id - 2
user_id - 1
name - group 2
And what you want to get back is all of that data in a single query. If this assumtion is correct what you want to do is run a query like this:
SELECT Users.Name as user_name,
UserOptions.option1,
UserOptions.option2,
UserGroups.name as group_name
FROM Users
INNER JOIN UserOptions ON (Users.user_id = UserOptions.user_id)
LEFT OUTER JOIN UserGroups ON (Users.user_id = UserGroups.user_id)
WHERE Users.user_id =1;
Now that above query will give you every piece of data that exists in the first 2 tables matched with every piece of data that exists in the 3rd table (UserGroups) So what you would get back for the data listed is 2 rows:
user_name, option1, option2, group_name
-------------------------------------------------------
john doe, true, false, group 1
john doe, true, false, group 2
Now that you have that data all you need is the PHP to convert the multiple rows of mostly duplicate data into something that your program will understand.