我有一个包含两个字段candidate_id和keyword_id的表。我需要列出所有具有keyword_id 5和6的候选人/ candidate_id。有人请帮我写一个单独的mysql查询。
答案 0 :(得分:1)
目前还不清楚你究竟想要什么,但是这个查询为你提供了至少与给定关键字匹配的所有候选人(使用LIKE搜索关键字中的匹配项。如果给出关键字'php'并且关键字在你的数据库是'php programmer',这个匹配会出现)。像这样的东西应该可以解决问题,如果这是你所追求的。
$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
);";
答案 1 :(得分:1)
一个很容易适应两个以上关键字_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答案中讨论的主题过于宽泛和主观。
答案 2 :(得分:0)
你需要有记录吗? 1. 5或6 OR 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);