0

我有一张包含数百个健身目标的表格。下面是一个子集。

  1. “我想减掉 10 磅。”
  2. “在 6 分钟内跑完一英里。”
  3. “在 7 分钟内跑完一英里。”
  4. “准备好泳衣,减掉 5 磅。”
  5. “能够跑一英里不到七分钟。”

如何找到相似健身目标的匹配项?例如,#1 和#4 都想减肥,#3 和#5 都想在 7 分钟内跑完一英里。此外,#2、#3 和#5 都想跑得更快。如何有效地搜索此健身目标表以确定哪些目标相似?目标存储在 mysql 表中。我正在寻找 PHP 中的实现。

4

3 回答 3

1

好吧,您可能会标记一些关键字,例如“重量”、“磅”、“磅”,以后可以由管理员检查

于 2012-08-18T23:34:14.777 回答
1

您可以通过以下两种方式之一执行此操作:

在 PHP 中,您可以使用相似文本函数。然而,这是一种非常普通的方法。

更好的办法是使用Mysql的全文搜索。问题是您无法比较数据库中的两行,而是将文本字符串与表中的数据进行比较:

示例基于:

mysql> CREATE TABLE articles (
    ->   id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->   title VARCHAR(200),
    ->   body TEXT,
    ->   FULLTEXT (title,body)
    -> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO articles (title,body) VALUES
    -> ('MySQL Tutorial','DBMS stands for DataBase ...'),
    -> ('How To Use MySQL Well','After you went through a ...'),
    -> ('Optimizing MySQL','In this tutorial we will show ...'),
    -> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
    -> ('MySQL vs. YourSQL','In the following database comparison ...'),
    -> ('MySQL Security','When configured properly, MySQL ...');
Query OK, 6 rows affected (0.00 sec)

mysql> SELECT id, MATCH (title,body) AGAINST ('Tutorial')
    -> FROM articles;
+----+-----------------------------------------+
| id | MATCH (title,body) AGAINST ('Tutorial') |
+----+-----------------------------------------+
|  1 |                        0.65545833110809 |
|  2 |                                       0 |
|  3 |                        0.66266459226608 |
|  4 |                                       0 |
|  5 |                                       0 |
|  6 |                                       0 |
+----+-----------------------------------------+
6 rows in set (0.00 sec)

这将根据最佳匹配对结果进行排名。

您可以很好地使用它从数据库中获取一行,然后使用它来查找最佳匹配的行。

于 2012-08-18T23:37:41.543 回答
0

这只是我在黑暗中戳,但你可以有多个布尔值。

runFaster=true;
loseWeight=true;
specificDistance=true; //Do they have a specific distance in mind?

和一些定量值:

weightLoss=3; //lbs
speedIncrease=1 //km/h
runDistance=7 //miles

类似的东西?

于 2012-08-18T23:43:52.783 回答