php - 通过计算 PDO/SQL 相关的单词数对搜索结果进行排名

标签 php mysql search pdo keyword

我想创建一个按预设排名显示结果的搜索引擎。评级由两部分组成 1. 帖子浏览量(由“帖子”表中的 POP [INT] 表示)和文本本身的单词量(由“帖子”表中的 TXT [STRING] 表示)。

也就是说,如果有三个结果

//$search = 'apple macbook';
  1. 3 个点击 (POP) 和 3 个相关关键字(2 个 MACBOOK、1 个在 TXT 中找到的 APPLE)= 6 - 将首先展示
  2. 2 个点击 (POP) 和 3 个相关关键字(1 个 MACBOOK、1 个在 TXT 中找到的 APPLE)= 5 - 将显示第二个
  3. 2 个点击 (POP) 和 1 个相关关键字(在 TXT 中找到 1 个 APPLE)= 3 - 将显示第三

我的代码:

$search = isset($_GET['s']) ? htmlspecialchars($_GET['s']) : ''; 
$search = strtoupper($search);
$search = strip_tags($search); 
$search = trim($search);
$words = explode(' ', $search);
$words_condition = array();
$arguments = array();
foreach ($words as $word) {
    $words_condition[] = 'TXT LIKE ?';
    $arguments[] = '%'.$word.'%';
}

    $query = $db->prepare("SELECT * FROM `post` WHERE ".implode(" OR ",
    $words_condition)." ORDER BY POP DESC"); $query->execute($arguments);

关于我的表结构(“post”表)有 4 列...

  1. ID [INT] 2. SUB(帖子主题)[STRING] 3. TXT(正文/全文)[STRING] 4. POP [INT](访问此帖子的点击量)。

最佳答案

CREATE TABLE post (id INT, txt varchar(100), pop int);
INSERT INTO post VALUES (1, "key key cle cle", 1);
INSERT INTO post VALUES (2, "key key cle cle", 2);
INSERT INTO post VALUES (3, "key key cle", 2);
INSERT INTO post VALUES (4, "key cle cle", 1);

SELECT *, (LENGTH(txt) - LENGTH(replace(txt, 'cle', '')))/LENGTH("cle") as cle, 
    (LENGTH(txt) - LENGTH(replace(txt, 'key', '')))/LENGTH("key") as key,
    (LENGTH(txt) - LENGTH(replace(txt, 'cle', '')))/LENGTH("cle")+(LENGTH(txt) - LENGTH(replace(txt, 'key', '')))/LENGTH("key") as nbKW
FROM post 
ORDER BY nbKW DESC, pop DESC;

好的,我测试了一下,效果非常好!你必须根据你的论点来调整它!

关于php - 通过计算 PDO/SQL 相关的单词数对搜索结果进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40276999/

相关文章:

php - while ($row = mysql_fetch_array($result)) - 执行了多少个循环?

mysql - @GeneratedValue 不起作用。 "java.sql.SQLException: Field ' ID'没有默认值”

mysql - 导入我的数据库时出错 : ERROR 1146 (42S02) at line 217004: Table 'caol2.cao_curriculo' doesn't exist

ruby-on-rails - 如何使用 Sunspot Solr 搜索多个表(模型)?

php - 基于引用表值连接表

PHP/MySQL 类别 div 换行问题

php - 如何将 mysql 结果链接到同一页面以显示更多详细信息

ruby-on-rails - 如何使用 sunspot 仅搜索已批准的文章

arrays - bash 。最快最有效的数组搜索

php - PHP 实际上使用 IEEE-754 float 吗?