Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL返回匹配多行的ID列表_Mysql_Database_Search_Join - Fatal编程技术网

MySQL返回匹配多行的ID列表

MySQL返回匹配多行的ID列表,mysql,database,search,join,Mysql,Database,Search,Join,我得到了以下表格模式和值: 我想要实现的是获得与多个标准匹配的提供者id(id\u provider)的列表,例如: 我想通过id_attribute=71和值3400进行搜索,还想通过id_attribute=70过滤该表,该值为4300。返回提供程序列表应为:(2) Next search-id_attribute=72,并且过滤后的值介于200和700之间,因此它应该返回等于(2,3)的提供者列表 这种结构可能吗?在第一个查询中,where子句类似于。。。其中(id_属性=71和va

我得到了以下表格模式和值:

我想要实现的是获得与多个标准匹配的提供者id(id\u provider)的列表,例如:

  • 我想通过id_attribute=71和值3400进行搜索,还想通过id_attribute=70过滤该表,该值为4300。返回提供程序列表应为:(2)
  • Next search-id_attribute=72,并且过滤后的值介于200和700之间,因此它应该返回等于(2,3)的提供者列表

这种结构可能吗?

在第一个查询中,where子句类似于
。。。其中(id_属性=71和value=“3400”)和(id_属性=70和value=“4300”)

在第二个示例中,您必须使用BETWEEN
。。。其中id_属性=72,值介于(200700)之间

您可能还必须使用
选择不同的id\u提供者
,这样您就不会得到多个相同的id。

第一次搜索:

SELECT your_fields
FROM your_table
WHERE ((id_attribute = 71 AND value = 3400) AND (id_attribute = 70 AND value=4300))
第二次搜索:

SELECT your_fields
FROM your_table
WHERE (id_attribute = 72 AND (value BETWEEN 200 AND 700) )

我用了很多括号让您看到“逻辑”细分。

其他答案都是正确的bt kamil您的值字段看起来像varchar…您不能用“between”表示varchar


你只能在范围内使用它…即。在某个日期或数字之间

您正在组合来自不同行的值,因此请考虑
分组和
拥有
。您的第一个查询是:

select id_provider
from
group by id_provider
having max(id_attribute = 71 and value = '3400') > 0 and
       max(id_attribute = 70 and value = '4300') > 0;
第二点:

select id_provider
from
group by id_provider
having max(id_attribute = 72 and value between '200' and '700') > 0;

注意,引号是因为value列实际上是一个字符串。如果需要数字比较,则可能需要将其转换为数字。

是,这是可能的。到目前为止,您编写了什么查询?我尝试使用GROUP BY id_provider和HAVING子句,但没有得到预期的结果。根据问题和下面的评论,您想要的结果很难理解。我建议你找到一种方法来重新措辞,这可能会让你更清楚地了解你想做什么。不完全是这样,对于第一个你只搜索一个属性的方法,我想同时使用两个属性(71和70)(或者更多属性)进行筛选。对不起,我读得太快了,跳过了一行,听起来您必须使用
,但如果我使用或,即使只有一个条件匹配,我也会得到结果。如果我使用,则不会返回任何结果。如果使用,则不会返回带括号的结果;括号内的两个条件都必须为true才能返回true(使用
)。看看这个:我知道它们都应该是真的,但是当我尝试搜索两个属性和值时,结果是空的。只有当我使用或它工作,但结果是不好的,因为它返回提供者id,即使只有一个标准匹配,而不是两者都匹配。第一次搜索不起作用,已经尝试过了,但我认为它不是那么简单。我认为在一个WHERE子句中不能使用两个id_属性。太好了,这正是我想要的。非常感谢你的回答。