2017-07-09 17 views
1

3人のノートに基づいてデータベースからユーザーを取得したいと思います。MySQLは3つのクエリを1つに結合します

を与えられたとして、ユーザー数が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

個別のクエリは完全に優れています。データベースレイヤで一貫性を失いますが、アプリケーションレイヤで修正できます。 1つのクエリでそれを行う方法は

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行あることが分かります)。パフォーマンスを守り、それを偽ってください。

関連する問題