SQL::AbstractWHERE
を使用してこのクエリの句を生成するにはどうすればよいですか:
SELECT COUNT(*) FROM table WHERE id = 111 AND NOT FIND_IN_SET(type, '1,2,3,4') AND status = 'pending';
のような条件を含める適切な方法は何WHERE FIND_IN_SET(type, '1,2,3,4')
ですか?
SQL::AbstractWHERE
を使用してこのクエリの句を生成するにはどうすればよいですか:
SELECT COUNT(*) FROM table WHERE id = 111 AND NOT FIND_IN_SET(type, '1,2,3,4') AND status = 'pending';
のような条件を含める適切な方法は何WHERE FIND_IN_SET(type, '1,2,3,4')
ですか?
not_bool単項演算子オプションを参照してください。
use SQL::Abstract;
my $sql = SQL::Abstract->new;
my $where = {
id => 111,
status => 'pending',
-not_bool => "FIND_IN_SET(type, '1,2,3,4')",
};
my ($query, @bind) = $sql->select(
'table',
'count(*)',
$where,
);
これはどのよう$query
に見えるかです:
SELECT count(*) FROM table WHERE ( ( (NOT FIND_IN_SET(type, '1,2,3,4'))
AND id = ? AND status = ? ) )
このコードは次のWHERE
句を生成します。
my $sql = SQL::Abstract->new;
my %where = (
id => 111,
-nest => \"NOT FIND_IN_SET(type, '1,2,3,4')",
status => 'pending',
);
my ($stmt, @bind) = $sql->where(\%where, \@order);
FIND_IN_SET は標準 SQL ではないため、SQL::Abstract はそれをサポートしていません。ただし、リテラル SQLを SQL::Abstract クエリに入れることはできます。あなたの解決策はそのルートにあると思います。
見てください:DALMP
PHPを使用したMySQLのデータベース抽象化レイヤー
脂肪0%で非常に使いやすいです。必要な場合にのみデータベースに接続します。