私は、candidate_id と keyword_id の 2 つのフィールドを持つテーブルを持っています。keyword_id が 5 と 6 のすべての候補者/candidate_id をリストする必要があります。誰か、このための単一の mysql クエリを書くのを手伝ってください。
3 に答える
1
2つ以上のkeyword_idに簡単に適応できるオプションは...
SELECT
candidate_id
FROM
yourTable
WHERE
keyword_id IN (1,2)
GROUP BY
candidate_id
HAVING
COUNT(DISTINCT keyword_id) = 2
別の方法は...
SELECT
k1.candidate_id
FROM
yourTable AS k1
INNER JOIN
yourTable AS k2
ON k1.candidate_id = k2.candidate_id
WHERE
k1.keyword_id = 1
AND k2.keyword_id = 2
ただし、これらのオプションはどちらも適切に拡張できないことに注意してください(検索する候補の数、キーワード、およびキーワードの数を増やすと)。
この不十分なスケーリングに対処する方法は、データとニーズに完全に依存します。SOの回答で議論するには、広すぎて主観的なトピックです。
于 2012-10-12T09:53:58.557 に答える
1
正確に何が必要かははっきりしませんが、このクエリでは、特定のキーワードと少なくとも1つ一致するすべての候補が得られます(キーワード内の一致を検索するLIKEを使用します。キーワード「php」が指定され、データベース内のキーワードが「phpプログラマー」、この一致が表示されます)。これがあなたが求めているものであるならば、このような何かがトリックをするはずです。
$sQueryExtension = '';
foreach($keywords as $keyword) {
$sQueryExtension .= " OR `keyword` LIKE '%$keyword%'";
}
$sQueryExtension = substr($sQueryExtension, 3); // skip first OR
$sQuery = "
SELECT candidate.*
FROM candidate, match_table
WHERE candidate.id = match_table.candidate_id
AND match_table.keyword_id IN (
SELECT * FROM keyword WHERE $sQueryExtension
);";
于 2012-10-12T09:34:35.397 に答える
0
1のレコードが必要ですか。5または6または2のいずれかです。5と6の両方の候補が必要ですか。
ケース1の場合
SELECT candidate_id
FROM <table>
WHERE keyword_id in (5,6);
ケース2の場合
SELECT candidate_id
FROM (SELECT candidate_id, count(distinct keyword_id)
FROM <table>
WHERE keyword_id in (5, 6)
GROUP BY candidate_id
HAVING COUNT(DISTINCT keyword_id) > 1);
于 2012-10-12T11:44:51.280 に答える