php - 在 MYSQL 数据库中存储和查询主题标签的最有效方法是什么

标签 php mysql sql laravel

我正在构建我的 MYSQL 表,我正在使用 Laravel 构建一个平台,用户可以在其中上传包含描述的图像。此描述将包含主题标签。

现在我想知道存储描述和搜索描述的最有效方法是什么。

最初,我考虑将描述作为一个整体存储在单个文本列中,并在对该列建立索引后进行简单的搜索。这将允许用户通过主题标签和一般单词进行搜索。

然后我想知道提取主题标签并将其根据照片 ID 存储在自己的表中是否会更有效。如果它只能按标签搜索,但您也可以按常规单词搜索,那么这个想法会很有效。

任何人都可以确认什么是最好的方法,甚至可以建议另一种方法。

谢谢

最佳答案

存储数据的方式取决于您访问数据的方式。

如果您只想查看描述和哈希标签,那么您可以将它们放入单个未索引字段中,并在每个图像时获取它们。

根据您的指定,您似乎想要一个可作为文本搜索的 descriptions 列。这可能足以满足您的目的。

但是,如果您希望能够专门提出有关哈希标签的问题,例如:

  • 数据库中有哪些哈希标签以及有多少个?
  • 特定图像或图像组上有哪些井号标签?
  • 两个图像有哪些共同的哈希标签?
  • 哪些井号标签“包含”其他井号标签(即#cat 和 #catamaran)?

然后您将需要一个单独的哈希标签表。我的建议是将两者结合起来。像这样的东西:

create table images (
    imageId int auto_increment primary key,
    description text,
    createdAt datetime,
    createdBy varchar(255),
    fulltext (description)
);

create table imageHashtags as (
    imageHashtagId auto_increment primary key,
    imageId int not null,
    hashtag varchar(255),
    constraint fk_imagehashtags_imageid foreign key (imageid) references images(imageid),
    index (hashtag)
);

您可能需要一个主题标签本身的引用表,这样它们就不会在表中重复。没有足够的信息来了解这是否是一个好方法。

关于php - 在 MYSQL 数据库中存储和查询主题标签的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56304908/

相关文章:

php - 将许多 MySQL 查询与逻辑合并到数据文件中

PHP 安全 session

javascript - PHP - 使用 data-tag 属性的 AJAX 复选框过滤器

php - 在 Codeigniter 中运行多个分号分隔的查询

python - 如何在 MySQL Python 中创建数据库?

mysql - Sql 查询使用正则表达式

sql - 将正则表达式应用于 R 中的 SQL 数据库

sql - Azure Blob 无法批量加载

php - 如何在没有上下文路径的情况下获取 php 请求 URI?

php - 在html表格的每一行添加编辑按钮,以编辑数据库