我正在尝试在数据库中搜索具有特定mediaattributes的所有tags元素。该查询非常复杂,因为它当前执行以下操作:


如果Media与正则表达式匹配的MD5哈希,请在Hash表中搜索。
使用Attributes搜索链接到MediaNameDescriptionSourceWHERE LIKE,并对搜索查询中的每个单词进行OR LIKE拆分使用正则表达式/\s+/
搜索Tags,使用Description检查LIKE中的完整搜索字符串,然后使用完整搜索字符串和单个单词检查NameSlug


当前,我正在使用大量的PHP,它将整个查询组合在一起,然后使用DB::raw,但实际上不能正常工作。我之所以没有列出,是因为我没有正确使用它,因为我觉得它并不重要,但是如果需要的话,我会包括在内。

使用Laravel Eloquent或Fluent实际上可行吗?我在这里咬的东西超出了我的实际咀嚼能力吗?

这种搜索程度真的必要吗?有没有更好的方法来查找带有特定标题,描述,来源和标签的项目?

谢谢。



我的Media表:


ID
杂凑


我的Attributes表:


ID
名称

Media_ID


我的Tags表:


ID
名称
ug
描述


我的Tag_Media表:


Media_ID
Tag_ID

最佳答案

通过查询,您可以联接四个表,而联接是最慢的SQL操作,如果可以的话,您可能希望将所有这些表合并为一个更大的表,并将所有列都放置到位。
您将因重复输入而浪费内存,但通常可以提高查询性能。

具有2个表(无重复)的数据库体系结构的可能替代方案:

我的媒体表:


ID
杂凑
名称
描述
资源


我的标签表:


ID
名称
ug
描述
Media_ID


具有1个表的数据库体系结构的可能替代方案(对于每种媒体,您需要具有相同媒体值和不同标签值的重复条目):

我的媒体表:


ID
杂凑
名称
描述
资源
标签名称
Tag_Slug
标记说明


另外,尝试索引需要搜索的列。
对于这种情况,这可能是太重的武器,但是非关系数据库可能会为您提供更好的性能。

关于php - 使用Laravel通过与数据透视表链接的表搜索数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37684292/

10-11 22:22
查看更多