0
我有一個php應用程序,可以讓人們通過添加過濾器來搜索數據。查詢將根據他們的輸入自動生成。 因此,例如,他們可以爲需要的Date is greater than
添加過濾器。 然後,他們還可以添加多個過濾器,其中至少需要一個過濾器。 這工作得很好,但是,問題是某些過濾器依賴於聚合函數,如SUM
需要將其放入HAVING
子句。這基本上破壞了搜索邏輯,因爲我們無法再將該過濾器與由OR
分隔的其他過濾器相匹配。如果WHERE子句中的條件爲假,只需要HAVING子句中的約束條件
在下面的例子中,他們希望找到所有的人以這些過濾器:
日期大於2015年 和 (人是約翰尼或產品是接種疫苗或總支出大於10)
SELECT
SUM(expense) as total
FROM
people
JOIN
expense ON expense.person = id
WHERE
expense.date > 2015
AND
(person = 'Johnny' OR product = 'Vaccination')
GROUP BY
id
HAVING
(total > 10) -- Only want to require this constraint if the conditions in WHERE brackets clause are false
由於其中一個過濾器使用聚合函數,所以我們無法將其與其他過濾器進行匹配。
我試着把where條件作爲SELECT列中的一個列,如果那個列是假的,那麼在HAVING上做一個IF。這可以工作,但不是最優的,並且在很多情況下會中斷,因爲這個查詢將不得不自動生成。
有沒有人得到我應該如何解決這個問題的好建議?
我需要選擇所有這些,都需要有它可以在具有可以使用的列,這可能有一些性能影響,但除此之外,我想這會奏效。乾杯 –