2013-07-16 53 views
-1

我有如下表模式和值:MySQL的退货单

Table structure and values

我想要实现的是让提供商IDS(id_provider)匹配多个,其中列表指标分析,例如:

  • 我想通过id_attribute = 71和值3400来搜索,并且还希望过滤通过id_attribute该表= 70哪个值4300返回提供商列表应该是:(2)
  • 下一个搜索 - id_attribute = 72,并且过滤的值在200到700之间,所以它应该返回提供者列表等于(2,3)。

这种结构可能吗?

+0

是的,这是可能的。你到目前为止写了什么查询? – codingbiz

+0

我尝试使用GROUP BY id_provider和HAVING子句,但没有得到我所期望的。 – Kamil

+0

根据下面的问题和意见,您期望的结果很难理解。我建议你找到一种重新措词的方法,可以让你更清楚你想要做什么。 – DevlshOne

回答

0

您正在合并来自不同行的值,因此请考虑group byhaving。你的第一个查询是:

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; 

注意引号是因为该值列确实是一个字符串。如果您需要数字比较,则可能需要转换为数字。

+0

完美,这是我想要的方式。非常感谢你的回答。 – Kamil

0

在你的第一个问题时,你的where子句会像... WHERE (id_attribute = 71 AND value = "3400") AND (id_attribute = 70 AND value = "4300");

在你的第二个,你将不得不使用BETWEEN ... WHERE id_attribute = 72 AND value BETWEEN(200,700);

你也可能需要使用SELECT DISTINCT id_provider这样你就不会结束与多个相同的ID。

+0

不完全是,对于第一个只搜索一个属性,我想同时使用两个属性(71和70)进行过滤(或者甚至更多的属性)。 – Kamil

+0

对不起,我读得太快,我跳过一行,听起来像你将不得不使用'或' – Mash

+0

但是,如果我使用OR,即使只有一个标准匹配,我也会得到结果。如果我使用并且没有结果将被返回。 – Kamil

0

第一个搜索:

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

我已经使用了许多支架,让你看到的 “逻辑” 分区。

+0

第一次搜索不起作用,已经尝试过,但我认为它不是那么简单。我不能在单个WHERE子句中使用两个id_attributes。 – Kamil

0

其他答案是正确的bt kamil你的值字段看起来像varchar ....你不能在varchar之间使用“between”。

你可以使用它只能用于范围......也就是说,在某个日期之间或数字之间。