我有一个包含两个字段candidate_id和keyword_id的表。我需要列出所有具有mysql 5和6的候选人/ keyword_id _id。有人请帮我写一个mysql查询。
发布于 2012-10-12 17:53:59
一个可以简单适应两个以上的关键字_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然而,应该注意的是,这两个选项都不能很好地扩展(随着您增加候选者、关键字和搜索的关键字的数量。
如何处理这种糟糕的伸缩性完全取决于您的数据和您的需求。这是一个太宽泛和主观的话题,不能用这么简单的答案来讨论。
发布于 2012-10-12 17:34:35
还不清楚你到底想要什么,但是这个查询给出了至少有一个与给定关键字匹配的所有候选者(使用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
);";发布于 2012-10-12 19:44:51
您是否需要具有1. 5或6或2的记录?是否需要同时具有5和6的候选人?
对于情况1,
SELECT candidate_id
FROM <table>
WHERE keyword_id in (5,6);对于第二种情况,
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);https://stackoverflow.com/questions/12856006
复制相似问题