2017-07-09 59 views
1

我想根據3個筆記從數據庫中獲取用戶。MySQL將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。

+0

使用'select count(*)'獲取將返回的行數。 –

+0

@GordonLinoff,但我也需要返回用戶 – sakoaskoaso

+0

'select ... limit 100',看看你是否有100行。如果它少,查詢更多。 – user2722968

回答

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行)。備用的表現,假的。