2013-07-16 130 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」。

你可以使用它只能用於範圍......也就是說,在某個日期之間或數字之間。