首页 > 解决方案 > 在这个表结构中,如何按字段值搜索文章?

问题描述

在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

我很感激你的建议...

标签: mysqlsql

解决方案


您需要使用fields将表连接到fields_values表,field_id并将此联合表连接到内容fields_values.item_id

然后在 where 子句中,您可以为内容表中的列提供值fields.titlefield_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}'

虽然不是问题的一部分。如果没有适当的索引,这个模式将不能很好地适应大数据。我建议优化所有表的索引,尤其是索引列。


推荐阅读