当前位置: 首页 > 知识库问答 >
问题:

MySQL-跨多行和两列获取唯一id-GROUP BY几乎可以让我达到目的

公冶峰
2023-03-14

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

这是用于搜索功能的。

所述用户可能希望查找西立面上的任何问题(字段id-

以下是我到目前为止的情况:

$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);

我只需要符合所有标准的身份证...上面我得到了一些孤儿记录,也包含6楼的数据。

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

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

共有2个答案

况承福
2023-03-14

您需要将表本身连接起来,一个与您类似的问题被存档。

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

娄嘉石
2023-03-14

在EAV模型中查找满足所有属性条件的实体的一般解决方案是通过分离所有条件,实体分组,并使用计数(*)等于条件数的过滤结果。

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;

 类似资料:
  • 我想获得跨多个数字id列的唯一数字id值列表。我的目标是帮助总结用户更改多个表时数据库中的更改流,在我的示例中,从表a到B,然后返回到a。 我知道我可以通过附加每个列的列表来实现这一点,但我想利用数据。表内部,以尽可能提高效率。 需要:矢量或数据。具有唯一值的表格,例如c(1,2,3,4)

  • 本文向大家介绍检查一列以获取MySQL中的唯一值,包括了检查一列以获取MySQL中的唯一值的使用技巧和注意事项,需要的朋友参考一下 您可以为此使用子查询。让我们首先创建一个演示表 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 输出如下 这是检查列唯一值的查询 输出如下

  • 问题内容: 是否有可能为MySQL中的每个记录获取唯一的时间戳值? 我创建了一个样本表 并运行了一些示例“ INSERTIONS”,似乎时间戳记值已重复。 问题答案: 很快将有一天(5.6.4),MySQL将在TIMESTAMP列中提供小数秒,但是即使在小数秒中也不能保证是唯一的,尽管从理论上讲,它们通常是唯一的,特别是如果将MySQL限制为单个线。 如果需要按时间顺序排列的唯一编号,则可以使用U

  • 问题内容: 我有一个列ID,大约有1000个项目,其中一些已被删除,例如 我如何进行查询以查找那些可用的ID,以便可以将其重新用于其他项目? 它像一个,但我只想查找数据库中不存在的ID,因此,如果我使用删除项目,则下次单击添加项目时,我将其插入为 问题答案: 您可以使用以下查询获取最小可用ID: 它的作用是将表与其自身连接起来,并检查ID是否存在。如果为空,则该ID可用。假设您的表位于: 1 2

  • 问题内容: 给定Postgres数据库中的以下三列:第一,第二,第三;我如何创建一个约束使得排列是唯一的? 例如,如果数据库中存在,则将其作为非唯一变量排除在外。 问题答案: 您可以使用hstore创建唯一索引: 更新 实际上

  • 我有两个如图所示-和。我正在比较这两个值,并从中找到唯一的和重复的值,如下代码所示: 我正在正确获取,但没有获取唯一值。