2017-10-21 75 views
0

我在MySQL中有幾個(超過20個)表格,這些表格描述了許多不同級別(顏色,位置等)上的項目。以下是「table01」的示例MySQL:選擇一個匹配多行的項目

+----+----------+ 
| ID | property | 
+----+----------+ 
| 1 | A  | 
| 1 | B  | 
| 2 | C  | 
| 2 | B  | 
+----+----------+ 

現在我想要搜索符合多個條件的項目。以下查詢正常工作

SELECT 
    table01.ID, table01.property, table02.property, table03.property [...] 
FROM 
    table01 
LEFT JOIN table02 ON table02.ID = table01.ID 
LEFT JOIN table03 ON table03.ID = table01.ID 
[...] 
WHERE 
    table01.property = "A" 
    and table02.property = "B" 
    and table03.property = "A" 
    [...] 

繼承人我的問題。我想要搜索與某個表中的幾個屬性匹配的項目。例如(這個查詢顯然不起作用)

table01.property = "A" AND table01.property = "B" 

我不知道如何實現,因爲信息存儲在多行中。

有什麼建議嗎?數據庫非常龐大(每個表有數千個條目),並且不時添加新的行。我應該通過PHP做一些處理,還是有純粹的MySQL解決方案?

+0

問題需要更多信息。查詢的屬性是靜態的嗎?或者你想爲用戶定義的屬性創建動態查詢? –

+0

數據庫結構是靜態的,表和它們的列(名稱)保持不變。項目和屬性不時添加 –

+0

我的意思是查詢本身是靜態的嗎?你是否一直在查詢相同的屬性? –

回答

2

你可以做到這一點,例如,通過做

SELECT ID,count(property) AS CNT FROM table01 
WHERE property = 'A' OR property = 'B' 
GROUP BY ID 
HAVING CNT=2; 

這會給你誰擁有這兩個屬性ID列表。

然而,它可以增加更多的屬性來檢查和更難以處理更多的表。如果可能的話,重新考慮你的數據庫模式可能更有用,因爲它至少有一個包含屬性而不是多個屬性的表。

+0

謝謝,這應該適用於我 –

0

如下您可以使用@Gnudiff與您的查詢給定的查詢:

SELECT 
    table01.ID, table01.property, table02.property, table03.property [...] 
FROM 
    (SELECT *FROM table01 
    WHERE property = 'A' OR property = 'B' 
    GROUP BY ID 
    HAVING count(property)=2) as table01 
LEFT JOIN table02 ON table02.ID = table01.ID 
LEFT JOIN table03 ON table03.ID = table01.ID 
[...] 
WHERE 
    table02.property = "B" 
    and table03.property = "A" 
    [...] 

Click here for Demo

希望它能幫助!

+0

它按預期工作嗎? –