[Moscow.pm] конструкторе sql запросов

Анатолий Гришаев 0body0 на rambler.ru
Ср Дек 18 00:20:46 PST 2013


++ за идею.
-  за  прочитать несколько раз, чтобы вьехать.
+ за  ~~@$limit

18.12.2013 12:07, vividsnow пишет:
> как вариант что-то вроде:
> https://gist.github.com/vividsnow/8d294801959975730fc3
> (возможно более специфичное к вашей задаче)
>
> On 12/18/2013 03:44 AM, Nick Knutov wrote:
>> Не вижу, чем мне это может помочь.
>>
>> В данном примере posts_sql_view() возвращает нечто очень большое и
>> сложное, например селект с джойнами по куче таблиц из селекта с джойнами.
>>
>> Как минимум, конструировать запрос мне надо начиная с того места, где
>> может быть WHERE. И, например, как тут - наличие LIMIT и его количество
>> зависит от других параметров.
>>
>>
>> 18.12.2013 5:34, vividsnow пишет:
>>> https://metacpan.org/pod/SQL::Abstract
>>>
>>>
>>> 2013/12/18 Nick Knutov <mail на knutov.com <mailto:mail на knutov.com>>
>>>
>>>      У меня в коде в некоторых функциях, в зависимости от входных параметров,
>>>      конструируются разные sql запросы. Пример:
>>>
>>>      my $sql = posts_sql_view();
>>>      $sql .= ' WHERE ' if $type or $id or $main;
>>>      do { $sql .= ' ty.id =? '; push @params, $type;} if $type;
>>>      do { $sql .= ' AND p.id =? LIMIT 1'; push @params, $id
>>>      } if $id;
>>>      $sql .= ' ORDER BY id DESC ' unless $id;
>>>      do { $sql .= ' LIMIT ? ' ; push @params, $limit } if $limit and not $id;
>>>
>>>      Мне не нравится как это визуально выглядит. Как бы вы это переписали,
>>>      чтобы было понятнее и читабельнее?
>>>
>>>      ps: в некоторых других случаях можно было бы использовать && вместо
>>>      do{}, но не тут.
>>>
>>>      pps: ORM предлагать и обсуждать не надо. Как минимум потому, что запросы
>>>      сложные и сложность/стоимость проверки того, что генерирует ORM
>>>      многократно выше любого профита от ORM в данной ситуации.
>>>
>>>      --
>>>      Best Regards,
>>>      Nick Knutov
>>>      http://knutov.com
>>>      ICQ: 272873706
>>>      Voice: +7-904-84-23-130 <tel:%2B7-904-84-23-130>
>>>      --
>>>      Moscow.pm mailing list
>>>      moscow-pm на pm.org <mailto:moscow-pm на pm.org> | http://moscow.pm.org
>>>
>>>
>>>
>>>



Подробная информация о списке рассылки Moscow-pm