下面的MySQL查詢使用PHP來獲取$ sector,這是一個數字,$ subsector_text是逗號分隔的字符串。 $ subsector_text可以是單個數字或多個ID的列表,例如「3,4,7,9」。SQL查詢將逗號分隔的字符串與逗號分隔的字符串進行匹配?
$sql = "
SELECT DISTINCT a.id
, a.name
, a.category_id
, a.sector
, a.subsector
, a.year_in_operation
, a.state
, a.total_value
, b.country_id
, b.project_id
, c.isocode_3
, c.name
FROM com_barchan_project a
JOIN com_barchan_location b
ON b.project_id = a.id
JOIN com_barchan_country c
ON c.id = b.country_id
JOIN com_barchan_project_value_join d
ON a.id = d.project_id
WHERE a.state = 1
AND a.sector = '$sector'
AND a.subsector REGEXP '^{$subsector_text}[,]|[,]{$subsector_text}[,]|[,]{$subsector_text}$|^{$subsector_text}$'
ORDER
BY a.total_value DESC
, a.category_id ASC
, a.name ASC
";
我與上面的查詢遇到的問題是與線:
AND a.subsector REGEXP '^{$subsector_text}[,]|[,]{$subsector_text}[,]|[,]{$subsector_text}$|^{$subsector_text}$'
如果$ subsector_text =「3,4,5,9」,那麼它只能返回該記錄$ subsector字段中恰好包含「3,4,5,9」。
想要的結果是它將返回任何具有$ subsector_text中任何值的記錄。例如,所有這些應該返回,但目前不是。這份清單只是一個例子,絕非確切的。
1,3
1,5
1,3,7,9
3,5
3,4,5,9
9
3
5
4
如何更改查詢以選擇任何在$ subsector_text字符串中具有值的記錄?
請注意:如果$ subsector_text = 11,則不應選擇以下內容作爲示例。
1
12
21
任何幫助將不勝感激。
我想你已經發現了爲什麼在數據庫中使用逗號分隔值是一個超級壞主意。你可以調整你的模式,使其更符合關係數據庫約定嗎? – tadman
不是沒有重寫應用程序的各個部分。 –
現在你要麼解決這個問題,即使它是一個巨大的麻煩,或者你可以試着鋪平它很多很多的代碼,它們真的不應該放在第一位。這是如何發生難以克服的技術債務:拖延不可避免的。 – tadman