良い日、私はこれを行う方法を理解できないようです。まず、データベースモデルについて説明します。
User (user_id, name)
Job (job_id, name)
UserTopJob (user_id, job_id)
UserOtherJob(user_id, job_id)
ユーザーは自分が一番好きなトップジョブを設定できます。これらの値は、user_idとjob_idによってUserTopJobに保存されます。ユーザーは、好きな他のジョブをUserOtherJobに設定することもできます。
さて、私がやりたいのは、私の求人検索入力に一致するユーザーをクエリすることです。たとえば、検索入力はjob_id 1と2です。ここで、job_id1とjob_id2の両方に一致するユーザーをクエリしたいのですが、ユーザーがトップまたは他のジョブに属しているか、それらの間で分割されているかは関係ありません。 2つのテーブル。
したがって、次の場合はユーザーを返す必要があります。
入力IDの数は増える可能性があり、制限はありません。常にすべての入力値と一致する必要があります。編集:たとえば、job_ids 1と2と3をクエリに入れる場合、ID 1と2と3は、そのユーザーの最上位または他のテーブルにある必要があります。
誰かが私がこれを行うことができ、db-performanceにあまり圧力をかけないMySQLクエリを作成するのを手伝ってくれませんか?
ここで私を助けてくれてありがとう!
了解しました。これは今夜のブレインバスターでした。しばらくこれをいじってみて、これを思いついたのですが、うまくいくようです。
SELECT user_id, SUM(matched) AS totalMatched FROM
(
SELECT uoj.user_id, COUNT(uoj.job_id) AS matched FROM userOtherJob AS uoj
INNER JOIN user AS u ON u.user_id = uoj.user_id
WHERE uoj.job_id IN (1,2)
GROUP BY u.user_id
UNION ALL
SELECT utj.user_id, COUNT(utj.job_id) AS matched FROM userTopJob AS utj
INNER JOIN user AS u ON u.user_id = utj.user_id
WHERE utj.job_id IN (1,2)
GROUP BY u.user_id
) AS t
GROUP BY user_id
HAVING totalMatched = 2
このクエリは、「other」テーブルの一致をカウントし、その後、「top」テーブルの一致をカウントして、両方のテーブルの合計を合計します。したがって、一致の総数(上位とその他を合わせたもの)は、探しているジョブの数と同じ値である必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加