Which solution fits best depends on how many users and listings, see discussion of a similar but simpler problem: