php - MySQL MATCH AGAINST 与 JOIN

标签 php mysql

我正在尝试构建一个使用图像标签的相关图像部分。

我的数据库结构非常简单:

table: images          table: image2tag      table: tags     
|image_id|image_path|  |t2i_id|image_id|tag_id|  |tag_id|tag_name|

我想做的是根据两者中的标签找到与当前图像具有高度相关性的图像。通过浏览其他帖子,我认为我可能需要使用 MATCH AGASINT,比较的值是数字 ID,但根据 dev.mysql.com MATCH AGAINST 用于比较文本字符串,所以我很困惑。

我在 stackoverflow 上找到了示例,但没有一个涉及连接,有人可以帮我解决这个问题。到目前为止我尝试了什么:

$getRelated = $conn -> prepare("SELECT *, 
    MATCH(it.image_tag_id) AGAINST (?) AS score 
FROM images i 
    LEFT JOIN image2tag i2t
ON i.image_id = i2t.i2t_image_id
    LEFT JOIN image_tags it
ON i2t.i2t_tag_id = it.image_tag_id
    WHERE MATCH(it.image_tag_id) AGAINST (?)
    ORDER BY score DESC LIMIT 5");
        $getRelated -> bindParam(1, $tags, PDO::PARAM_STR);
        $getRelated -> bindParam(2, $tags, PDO::PARAM_STR);
        $getRelated -> execute();

我想我的做法是错误的,如有任何帮助,我们将不胜感激。

最佳答案

很久以前我用过这个。

您需要以下内容:

  • myisam
  • char、varchar 或 text 数据类型
  • 全文索引

数字是不可能的。参见官方文档:https://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

也许你可以拆分逻辑:

  • 在您的文本图像标签中进行全文搜索
  • 使用上面的图像标签 id 进行连接

关于php - MySQL MATCH AGAINST 与 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31758097/

相关文章:

php - 显示使用 codeigniter 中的一对多关系存储的数据库中的图像

javascript - 根据下拉字段选择从数据库填充表单文本字段

mysql - 无法启动 MariaDB

mysql - 如何在 MySQL 中执行递归 SELECT 查询?

php - PHP中如何上传不存在的文件

php - [mysql][php] 两个表的有问题的连接结果并在 php 中进行过滤

php - 如何通过id获取<select>的值?

php - mysql_query 插入信息的问题

php - 找不到 Laravel [Centos 6] 的驱动程序

php - 使用 php/mysql 的简单 URL 旋转器