Как я могу сгенерировать SQL-запрос, используя SQL :: Abstract? - PullRequest
3 голосов
/ 12 октября 2010

Как мне сгенерировать предложение WHERE для этого запроса, используя SQL :: Abstract :

SELECT COUNT (*) ИЗ таблицы WHERE id = 111 И НЕ FIND_IN_SET(тип, '1,2,3,4') И status = 'pending';

Как правильно включать такие условия, как WHERE FIND_IN_SET(type, '1,2,3,4')?

Ответы [ 4 ]

6 голосов
/ 12 октября 2010

См. Параметр унарного оператора 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 = ? ) )
3 голосов
/ 12 октября 2010

Этот код генерирует предложение 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);
1 голос
/ 12 октября 2010

FIND_IN_SET не является стандартным SQL, поэтому SQL :: Abstract не поддерживает его. Однако вы можете поместить любой литерал SQL в запрос SQL :: Abstract. Я ожидаю, что ваше решение лежит на этом пути.

0 голосов
/ 30 октября 2010

Взгляните на: DALMP

Уровень абстракции базы данных для MySQL с использованием PHP

0% жира и чрезвычайно прост в использовании. Подключаться к базе данных только при необходимости.

http://code.google.com/p/dalmp/

...