我有一个包含两个字段候选 ID 和关键字 ID 的表。我需要列出所有具有关键字 ID 5 和 6 的候选人/候选人 ID。请有人帮我为此编写一个 mysql 查询。
问问题
76 次
3 回答
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 回答
1
一个易于适应两个以上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 回答
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 回答