0
您好,我在下面有一個簡單的示例查詢,這實際上並不是我正在使用的,因爲它在這裏解釋太複雜了。基本上這個查詢正在用於Web應用程序的搜索。Mysql:在沒有子查詢的地方使用GROUP_CONCAT&FIND_IN_SET
由於此查詢可以拉出的數據量我試圖避免使用HAVING或子查詢,因爲它大大增加了檢索數據所花費的時間量。
我想在where子句中使用FIND_IN_SET,但顯然GROUP_CONCAT不能在where子句中使用,所以我想嘗試下面這樣簡單但我不認爲變量設置在where和no結果被返回。
SELECT
v.message,
@cat_values:= GROUP_CONCAT(c.category_value) as cat_values
FROM
#Where the audit message is stored
AUDIT_ITEMS AS V
#Link table containing primary key of AUDIT_ITEMS and AUDIT_CATEGORIES
LEFT JOIN AUDIT_ITEM_CATEGORIES AS ic
ON V.UUID = ic.ITEM_UUID
#Gets category uuid from link table above
LEFT JOIN AUDIT_CATEGORIES AS c
ON ic.CATEGORY_UUID = c.UUID
#Gets the category label/type
LEFT JOIN AUDIT_CATEGORY_TYPES AS ct
ON c.CATEGORY_TYPE_UUID = ct.UUID
WHERE TRUE
#example filter used below
AND FIND_IN_SET("Errored", @cat_values) > 0
...etc...
我曾嘗試:
AND FIND_IN_SET("Errored", (SELECT GROUP_CONCAT(c.category_value))) > 0
但它似乎慢。
也試過:
HAVING FIND_IN_SET("Errored", GROUP_CONCAT(c.category_value)) > 0
但必須是基於GROUP_CONCAT值高效篩選結果的方式嗎?
因爲在查詢後運行has,所以返回完整的一組結果,然後對它進行過濾 – Purgatory 2015-02-06 15:20:25