mysql - 如何选择具有相同 ID 共享一组值的行?

标签 mysql sql

我正在处理内部搜索引擎(MySQL db)的 SQL 请求。我希望允许用户搜索精确的表达式,因此当他们搜索 "foo bar" 时,他们会得到包含 foo AND bar 的文档,并且不仅仅是 foobar

search_documents_words 表:

| word_id | doc_id | word |
---------------------------
| 1        | 1      | foo  |
| 2        | 1      | bar  |
| 3        | 2      | foo  |

search_documents 表:

| doc_id | doc_name |
---------------------
| 1      | mydoc1   |
| 2      | mydoc2   |

我想要得到什么:

| doc_id | doc_name |
--------------------
| 1      | mydoc1   |

假设我的关键字位于 PHP 数组中。

我怎样才能实现这一目标?

最佳答案

假设您的搜索关键字在数组中

$search = array('foo','bar');
$keywords = '';
foreach($search as $values) {
   $keywords .= "'.$values.',";
}
$keywords = rtrim($keywords,","); // creating words as 'foo','bar'

然后执行这个查询

$query = "SELECT B.*
          FROM search_documents_words A
          JOIN search_documents B ON A.doc_id = B.doc_id
          WHERE A.word IN(".$keywords.")";

已编辑

如果相同的文档 ID 不重复单词(包含许多 foo 条目的文档 1 不适用于此查询),则这种情况将起作用

$query = "SELECT B.*
          FROM search_documents_words A
          JOIN search_documents B ON A.doc_id = B.doc_id
          WHERE A.word IN(".$keywords.")
          GROUP BY A.doc_id HAVING COUNT(A.doc_id) = '".count($search)."' ";

关于mysql - 如何选择具有相同 ID 共享一组值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035924/

相关文章:

MySQL 错误 2003 (HY000) : Can connect from 127. 0.0.1,但不是通过 192.168.1.53

php - 准备好的语句和二阶 SQL 注入(inject)

mysql - 在 SQL 中聚合模型 "through"其他模型?

mysql - 打印表中的每一行时保存 COUNT 列外观

php - 从一张表中选择所有记录并检查它们是否在第二张表中常见

javascript - 我正在将 ajax 请求传递到另一个远程服务器以获取访问记录

SQL 创建数据库如果不存在,意外行为

mysql - SQL - 试图在分组后查找 1's over 0' s 的速率?

mysql - Error-1054 'column name' 中的未知列 'field-list'

mysql - 无法创建表