2

我需要一种方法来搜索动态生成的字段。用户将搜索 3 个必填字段和n个可选字段。

这是用于搜索功能。

所述用户可能想要查找位于西立面 (field_id->1, field_value->West)、6 楼 (field_id->4, field_value->6) 和 #52 号房间 (field_id -> 2,字段值-> 52)。

这是我到目前为止所拥有的:

$query = "SELECT inspection_finding_id
      FROM if_field_values
      WHERE field_id IN (1, 2, 4) AND field_value IN ('West', 6, 52)
      GROUP BY field_id, field_value, inspection_finding_id";
$result = mysql_query($query);

我只需要符合所有条件的 id ......通过上面的内容,我得到了一些孤儿记录,这些记录也包含 6 楼的数据。

我没有足够的代表来展示我的桌子的图像,所以这里是一个悲伤的尝试来展示我的桌子

| id | field_id | field_value |
+----+----------+-------------+
|161 |     1    |    West     |
|161 |     4    |    6        |
|161 |     2    |    52       |
|163 |     4    |    6        |
4

2 回答 2

1

在 EAV 模型中寻找满足所有属性条件的实体的一般解决方案是用ORGROUP BY实体分隔所有条件,并过滤HAVING count(*)条件数量相等的结果。

SELECT inspection_finding_id
FROM if_field_values
WHERE field_id = 1 AND field_value = 'West'
   OR field_id = 4 AND field_value = '6'
   OR field_id = 2 AND field_value = '52'
GROUP BY inspection_finding_id
HAVING COUNT(DISTINCT field_id) = 3;
于 2013-05-28T06:04:31.000 回答
0

您需要将表与自身连接起来与您的类似问题已归档。

如果您尝试使用IN,您将获得多行,之后您需要计算它们是否匹配,这将与您的可选字段混淆。

于 2013-05-28T04:29:16.597 回答