我想根据3个音符从数据库中获取用户。
爱好和国家完全一致
如果返回的用户数少于100,则转到下一个
爱好相同但国家不同
如果返回的总用户数小于100,则转到下一个 爱好不同但国家相同。
这是我写的查询,以获得其爱好和国家相同的用户。
SELECT users.*
FROM users
JOIN user_opt ON users.id = user_opt.UserId
WHERE user_opt.Disc=1 AND user_opt.country IN(".implode(',',$Countries).") AND user_opt.Hobbies REGEXP '".implode('|',$Interests)."'
Countries
和Interests
都是数组。
现在这里是我被困住的地方。我不知道如何检查返回的行数是否小于100。
答案 0 :(得分:0)
单独的查询非常好:您放弃了数据库层的一致性,但您可以在应用程序层修复它。在一个查询中执行此操作的方法是
SELECT *
FROM (SELECT 1 AS chunk, users.*
FROM users
WHERE foo=bar
UNION
SELECT 2, users.*
FROM users
WHERE foo=bar AND foobar=barfoo
UNION
SELECT 3, users.*
...)
ORDER BY chunk
LIMIT 100
但这很可能完全杀死查询平面并导致它为所有"子查询"选择所有匹配的行。并且在对整个结果集进行排序之后限制到所需的行数(仅发现该联合的第一部分已经有100行)。保持表现,假装它。