Your question seems to me that you only want to show rows where the 'statusrecordstouser' column is 0 (for each user) but if that does not exist, show one where 'statusrecordstouser' is 1. If that is correct, consider something like this.
SELECT MAX(id), statusrecordstouser, iduserrecordstouser
FROM myTable
GROUP BY statusrecordstouser, iduserrecordstouser
ORDER BY iduserrecordstouser, statusrecordstouser;
This will return two rows if the user has a 0 and a 1, or one row if they only have one or the other. I have ordered to put them in an order that matches what you want (0 row will always go first). I used the max to get the latest row if a group occured more than once.
To show what I mean, this is what the output of the above query is:
| id | status | idUser |
+----+--------+--------+
| 3 | 0 | 2 |
+----+--------+--------+
| 2 | 1 | 2 |
+----+--------+--------+
| 4 | 0 | 3 |
+----+--------+--------+
Now, the question is how do you differentiate between the two rows? Well, you don't have to, you want to just take the first from each grouping because if it's 0 you'll take it, and if there is no 0 then it will be 1 and you can take that too. Please see this question for how to get the first item from a group.
The query looks something like this:
SELECT t.id, t.statusrecordstouser, t.iduserrecordstouser
FROM(SELECT MAX(id) AS id, statusrecordstouser, iduserrecordstouser
FROM myTable
GROUP BY statusrecordstouser, iduserrecordstouser
ORDER BY iduserrecordstouser, statusrecordstouser
) t
WHERE(SELECT COUNT(*)
FROM(SELECT MAX(id) AS id, statusrecordstouser, iduserrecordstouser
FROM myTable
GROUP BY statusrecordstouser, iduserrecordstouser
ORDER BY iduserrecordstouser, statusrecordstouser
) tt
WHERE tt.iduserrecordstouser = t.iduserrecordstouser AND tt.statusrecordstouser <= t.statusrecordstouser
) <= 1;
I tested this in SQL Fiddle and it worked. I even added a row that only had status 1 to make sure it worked.