我正在尝试构建一个使用图像标签的相关图像部分。
我的数据库结构非常简单:
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/