【问题标题】:How can I get a list of pages that contain one or more keyword - MySQL and PHP如何获取包含一个或多个关键字的页面列表 - MySQL 和 PHP
【发布时间】:2014-12-18 05:49:39
【问题描述】:

我对 SQL 很陌生,我希望有人可以帮助我找到实现以下功能的查询:

我有两个数据库表。一个称为page,是我网站上的页面列表。另一个表称为keywords,包含关键字和可以找到它们的相应页面。

表结构如下

Page                       Keywords
+-------+------+           +-------+-------+
| Pg_ID | URL  |           | Word  | Pg_ID |
+-------+------+           +-------+-------+

例如,可以在关键字表中找到以下条目:

  • word1 - page1
  • word1 - page2
  • word2 - page1
  • word2 - page2
  • word3 - page3

我从搜索框中获取查询并将其拆分为关键字。

例如,来自搜索查询的关键字是:word1, word2

如何返回包含这些关键字的页面列表,在本例中为 page1、page2?

谁能解释我如何创建一个 SQL 查询来执行此操作?

谢谢!

【问题讨论】:

  • 请提供表结构
  • 对于初学者,我们需要查看一些您尝试过的代码,以实际帮助您解决此问题。其次,您是否考虑过将相关信息存储在数据库中并使用 MySQL 中可用的FULLTEXT search features?
  • Wherekeyword in ('x','y') group by pageid with count([distinct] keyword) = 2

标签: php mysql


【解决方案1】:

如果我能理解你的设置,With the Following SQLFiddle 我相信我已经完成了你需要做的事情。没有列名,我只是假设并编造了一些。

SQL 数据

CREATE TABLE pages(
  page_id INT NOT NULL DEFAULT 1,
  page_keyword VARCHAR(50) NOT NULL
  );

INSERT INTO pages VALUES (1,'cool'),
  (1,'awesome'),
  (2,'lame'),
  (2,'waffle'),
  (3,'holy'),
  (3,'pope'),
  (3,'waffle');

查询

SELECT * FROM pages WHERE page_keyword = 'waffle';

收到的数据

PAGE_ID       PAGE_KEYWORD
2              waffle
3              waffle

【讨论】:

  • 这可能不是答案,但它至少展示了如何提出问题
猜你喜欢
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 2012-01-29
  • 2013-04-13
  • 2016-04-23
  • 1970-01-01
相关资源
最近更新 更多