首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过搜索标签组合查找id

问通过搜索标签组合查找id
EN

Stack Overflow用户
提问于 2012-10-12 17:24:37
回答 3查看 75关注 0票数 1

我有一个包含两个字段candidate_id和keyword_id的表。我需要列出所有具有mysql 5和6的候选人/ keyword_id _id。有人请帮我写一个mysql查询。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-12 17:53:59

一个可以简单适应两个以上的关键字_id的选项是...

代码语言:javascript
复制
SELECT
  candidate_id
FROM
  yourTable
WHERE
  keyword_id IN (1,2)
GROUP BY
  candidate_id
HAVING
  COUNT(DISTINCT keyword_id) = 2

另一种选择可能是...

代码语言:javascript
复制
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

然而,应该注意的是,这两个选项都不能很好地扩展(随着您增加候选者、关键字和搜索的关键字的数量。

如何处理这种糟糕的伸缩性完全取决于您的数据和您的需求。这是一个太宽泛和主观的话题,不能用这么简单的答案来讨论。

票数 1
EN

Stack Overflow用户

发布于 2012-10-12 17:34:35

还不清楚你到底想要什么,但是这个查询给出了至少有一个与给定关键字匹配的所有候选者(使用LIKE搜索关键字内的匹配。如果给定了关键字'php‘,并且数据库中的关键字是'php programmer',则会显示此匹配项)。如果这就是你想要的,像这样的东西应该能起到作用。

代码语言:javascript
复制
  $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
EN

Stack Overflow用户

发布于 2012-10-12 19:44:51

您是否需要具有1. 5或6或2的记录?是否需要同时具有5和6的候选人?

对于情况1,

代码语言:javascript
复制
SELECT candidate_id
FROM <table>
WHERE keyword_id in (5,6);

对于第二种情况,

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12856006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档