MySQL与JOIN对抗

时间:2015-08-01 04:06:20

标签: 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();

我想我会以错误的方式解决这个问题,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

很久以前我用过这个。

您需要以下内容:

  • 的myisam
  • char,varchar或text datatype
  • 全文索引

无法使用数字。请参阅官方文档:https://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

也许你可以分裂逻辑:

  • 在文字图片标记中进行全文搜索
  • 使用上面的图片标记ID进行连接