mysql - 在这个表结构中,如何按字段值搜索文章?
问题描述
在joomla表中有这三个表,存储文章的内容,存储自定义字段定义的字段和存储分配给文章中这些自定义字段的值的fields_values 。
这里的表定义及其一些字段
content
-------------
id
title
fields
-------------
id
title
name
fields_values
-------------
field_id <-- field_id refer to content id
item_id
value
我需要在内容记录中搜索 field_values 中的值,但我不知道该怎么做
为方便起见,我创建了这个sqlfiddle
具有价值目标的sqlfiddle
鉴于 sqlfiddle 示例数据,我需要搜索其中任何字段具有值的文章(内容记录)target
预期结果将是 id 为 1 的文章,因为field1
文章 1 的 in 具有值target
,而 ID 为 3 的文章,因为field2
文章 3 的 in 具有值target
我很感激你的建议...
解决方案
您需要使用fields
将表连接到fields_values
表,field_id
并将此联合表连接到内容fields_values.item_id
。
然后在 where 子句中,您可以为内容表中的列提供值fields.title
和field_values.value
获取列。
内容表中会有重复项。因此,您可以使用 distinct 进行选择,也可以在内容表中进行分组:
SELECT DISTINCT c.id, c.title FROM fields f
join fields_values v on f.id=v.field_id
join content c on c.id=v.item_id
WHERE f.title='{field_title}' and v.value='{value}'
虽然不是问题的一部分。如果没有适当的索引,这个模式将不能很好地适应大数据。我建议优化所有表的索引,尤其是索引列。
推荐阅读
- java - 找到多个文件,其独立于操作系统的路径为“META-INF/INDEX.LIST”
- angularjs - 如何在 Angular js 材料中分别抛出表单错误?
- unit-testing - 我什么时候应该觉得我的单元测试已经完成了?
- docker - 注册表在哪里运行
- java - 如何使用 java 8 迭代 JsonArray
- dll - 在输出 DLL 中设置 APP.config
- html - 无法将 url 读取为 JSON 数据
- gcc - 有人在 OpenBSD 6.3 上构建过 gcc 8.2.0 吗?
- knockout.js - 表格上的下拉菜单,允许每行仅选择一次项目
- java - Jenkins/Groovy - 对于数组中的每个项目,使用项目中的变量执行 shell 脚本