MySQL将3个查询合并为一个

时间:2017-07-09 15:53:37

标签: mysql sql

我想根据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)."'

CountriesInterests都是数组。 现在这里是我被困住的地方。我不知道如何检查返回的行数是否小于100。

1 个答案:

答案 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行)。保持表现,假装它。