以下のMySQLクエリでは、PHPを使用して1桁の$セクタと$ subsector_text(カンマ区切りの文字列)を取得します。 $ subsector_textは、1桁または「3,4,7,9」などのいくつかのIDのリストです。コンマで区切られた文字列とコンマで区切られた文字列を照合する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