🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

1236閲覧

二つの条件選択テーブルを参照しお互いの条件のマッチング率を算出してソートしたい

tajapaja

総合スコア5

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/09/25 01:26

実現したいこと

PHP&MySQLで求人企業と求職者のマッチングサイトを構築しています。
よくある絞り込み検索ではなく求人企業側と求職ユーザー側で設定した条件に一致している度合いでランク付けしたいのです。
絞り込まずにすべての求人情報に対しどの程度マッチしているかを表示しその度合いでソートしたいと言う事です。
例えば条件の選択肢が100件あったとして全てマッチしていれば100、半分だったら50などのように
数値を算出しソートしたいのです。
いいアイデアが浮かばず困っていますのでご教授お願いいたします。

例えば条件の選択肢として(WEB側でチェックボックスで登録)
地域:東京、埼玉、千葉、神奈川
業種:和食店、洋食店、中華店、アジア
が有った場合「求人企業マッチングテーブル」と「求人企業マッチングテーブル」に下記のようにデータが登録されます。

求人企業マッチングテーブル

企業ID区分選 択
業種和食店
業種洋食店
地域東京
業種中華店
地域神奈川
業種和食店
業種洋食店
業種中華店
業種アジア
地域東京
地域千葉
地域神奈川

求職者マッチングテーブル

求職ID区分選 択
業種和食店
業種洋食店
業種中華店
地域東京
地域千葉
地域神奈川
業種洋食店
業種中華店
地域東京

この時
下記のようなデータを作りたいです

求職ID企業ID選択数マッチマッチ率
50
33
100
67
33
100

で求職者マイページで求人情報一覧を見たとき
下記のような順番でソートしたいのです。

求職ID1の場合

求職ID企業ID選択数マッチマッチ率
100
50
33

求職ID2の場合

求職ID企業ID選択数マッチマッチ率
100
67
33

DB:MySQL5.7
言語:PHP7.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2019/09/25 01:39

変なテーブル設計ですね。 カラムの 区分 と 選択 ではなくて、業種 と 地域 にすればSQLはシンプルになるかと。
guest

回答2

0

たとえば

SQL

1create table company(cid int,category varchar(10),selection varchar(10)); 2insert into company values 3(1,'業種','和食店'), 4(1,'業種','洋食店'), 5(1,'地域','東京'), 6(2,'業種','中華店'), 7(2,'地域','神奈川'), 8(3,'業種','和食店'), 9(3,'業種','洋食店'), 10(3,'業種','中華店'), 11(3,'業種','アジア'), 12(3,'地域','東京'), 13(3,'地域','千葉'), 14(3,'地域','神奈川'); 15 16create table user(uid int,category varchar(10),selection varchar(10)); 17insert into user values 18(1,'業種','和食店'), 19(1,'業種','洋食店'), 20(1,'業種','中華店'), 21(1,'地域','東京 '), 22(1,'地域','千葉 '), 23(1,'地域','神奈川'), 24(2,'業種','洋食店'), 25(2,'業種','中華店'), 26(2,'地域','東京');
  • 集計

SQL

1select uid,cid 2,(select count(*) from user where uid=t1.uid) as u_select 3,count(*) as c_match 4,round(count(*)/(select count(*) from user where uid=t1.uid)*100,0) as ratio 5from user as t1 6left join company as t2 7on t1.category=t2.category and t1.selection=t2.selection 8group by uid,cid 9

ソートはratioをorder by でdescしてください

投稿2019/09/25 03:12

yambejp

総合スコア116694

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/09/25 03:19

普通、業種や地域はorでヒットさせるんじゃないかと・・・
guest

0

ベストアンサー

「絞り込まずにすべての求人情報に対しどの程度マッチしているかを表示」
とのことなので、マッチ率0%も表示したいってことですかね。

であれば、その場合、yambejp様のSQLに、以下を追加。

SQL

1create table m_company(cid int); 2insert into m_company values 3(1),(2),(3); 4 5create table m_user(uid int); 6insert into m_user values 7(1),(2);

そして、以下のようなSQL。

SQL

1SELECT V1.uid 2 , V1.cid 3 , V1.u_select 4 , V1.c_match 5 , ROUND( ( V1.c_match / V1.u_select ) * 100 ) as rate 6FROM ( 7 SELECT T1.uid 8 , T2.cid 9 , ( 10 select count('X') 11 from user T3 12 where T3.uid = T1.uid 13 ) as u_select 14 , ( 15 SELECT count('X') 16 FROM user T4 17 LEFT JOIN company T5 ON( 18 T5.category = T4.category 19 AND T5.selection = T4.selection 20 ) 21 WHERE T4.uid = T1.uid 22 AND T5.cid = T2.cid 23 ) as c_match 24 FROM m_user T1 25 , m_company T2 26 ) V1 27ORDER BY V1.uid, ( V1.c_match / V1.u_select ) desc 28;

投稿2019/09/27 17:10

tomari_perform

総合スコア760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問