2015-01-15 37 views
0

我有一個名爲「proposition」的主表「idProposition」和一個名爲「needs」的表「idProposition」和「idRequirement」列的MySQL表。我想得到的鏈接需求都在$ requireList php數組中。從多重條件請求中選擇行

我試圖做這樣的:

$req = "SELECT idProposition FROM proposition 
     WHERE (SELECT idProposition FROM proposition 
       WHERE needs.idProposition = proposition.idProposition 
         AND idRequirement NOT IN($requireList)) 
      IS NULL"; 

但是,當我提出要求,我有以下錯誤:

#1242 - Subquery returns more than 1 row 

含義,它不能測試,如果結果(命題不需要在$ requireList中)是空的,因爲有幾個結果。 我如何測試內部SELECT是否提供結果?

感謝您的幫助。

+0

爲什麼不只是LIMIT 1?或者使用JOINS。 – Neat 2015-01-15 17:24:57

+0

查詢的FROM子句中沒有表「需要」。 – axiac 2015-01-15 17:35:57

回答

0

試試這個:

SELECT p.* 
FROM proposition p 
    INNER JOIN needs n ON n.idProposition = p.idProposition 
WHERE idRequirement IN (1, 7, 9) # blah, blah, blah, put your list here 
GROUP BY p.idProposition 
HAVING COUNT(idRequirement) = 3  # put the size of the list here 

做些什麼:它SELECT一切都命題一起被喜歡與要求名單。如果只有一個需求被鏈接或全部都沒有關係。那麼它GROUP s那些行BY命題。每個命題將產生一行數據。然後它與這些行保持唯一的那些與列表大小相同數量的要求(即所有要求都存在)。

我沒有測試它,但它應該工作。如果沒有,只需將COUNT(idRequirement)添加到SELECT子句。

+0

不起作用,因爲例如,沒有要求的提議將不會被檢測到,而其所有要求都在列表中。 – yopla 2015-01-15 18:30:49

+0

我發現一個相當髒但工作的解決方案基於你:我在數據庫中添加了所有命題的要求0。 $ requireList從不包含0.並且我使用了「HAVING COUNT(idRequirement)= 1」,這樣只剩下無法訪問的條件。 – yopla 2015-01-15 18:40:50

0

使用

SELECT idProposition FROM proposition 
INNER JOIN needs on proposition.idProposition = needs.idproposition 

代替

SELECT idProposition FROM proposition 
     WHERE (SELECT idProposition FROM proposition 
       WHERE needs.idProposition = proposition.idProposition