We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 35971
    • 13 Posts
    Всем привет, есть чистый запрос, допустим чистый запрос работает нормально, т.е загвоздка только с xpdo (revo 2.3) с вложенным запросом :
    WHERE ( `LinkOrderParams`.`id_order` = ( -- а вот это нет!
                                            SELECT  `id` 
                                            FROM  `b_order` 
                                            WHERE  `b_order`.user =2147483647 
                                            ) 
             AND  `Param`.`name` LIKE  '%Формат%' -- данная часть подключается нормально 
    )

    SELECT 
        LinkOrderParams.id, 
        LinkOrderParams.id_value, 
        ParamValue.value, 
        Order.id
    FROM  
        `b_link_order_params` AS  `LinkOrderParams` 
    LEFT JOIN  
        `b_param_value`  `ParamValue`  ON ParamValue.id = LinkOrderParams.id_value
    LEFT JOIN  
        `b_order`  `Order` ON Order.user =2147483647
    LEFT JOIN  
        `b_param`  `Param` ON Param.id = LinkOrderParams.id_param
    
    WHERE ( `LinkOrderParams`.`id_order` = (
                                            SELECT  `id` 
                                            FROM  `b_order` 
                                            WHERE  `b_order`.user =2147483647 
                                            ) 
             AND  `Param`.`name` LIKE  '%Формат%'
    )



    КОД XPDO


    $s = $modx->newQuery('LinkOrderParams');
    $s->leftJoin('ParamValue','ParamValue','ParamValue.id = LinkOrderParams.id_value');
    $s->leftJoin('Order','Order','Order.user = 2147483647');
    $s->leftJoin('Param','Param','Param.id = LinkOrderParams.id_param');
    $s->select(array(
        'LinkOrderParams.id',
        'LinkOrderParams.id_value',
        'ParamValue.value',
        'Order.id'
    
    ));
    $s->where(array(
        'LinkOrderParams.id_order' => 'SELECT `id` FROM `b_order` WHERE user = 2147483647 // собсна вот здесь и проблема, как можно подставить вложенный запрос, не делая дополнительных выборок?
    ));
    $s->andCondition(array(
        'Param.name:LIKE' => '%Формат%'
    ));
    




    Спасибо
      • 35971
      • 13 Posts
      Пока я решил вот так. Но желательно услышать подсказку, чтобы писать на чистом xpdo
      $s = new xPDOCriteria($modx, " SELECT 
                                          LinkOrderParams.id, 
                                          LinkOrderParams.id_value, 
                                          ParamValue.value
                                      FROM  
                                          `b_link_order_params` AS  `LinkOrderParams` 
                                      LEFT JOIN  
                                          `b_param_value`  `ParamValue`  ON ParamValue.id = LinkOrderParams.id_value
                                      LEFT JOIN  
                                          `b_order`  `Order` ON Order.user = :user
                                      LEFT JOIN  
                                          `b_param`  `Param` ON Param.id = LinkOrderParams.id_param
      
                                      WHERE ( `LinkOrderParams`.`id_order` = (
                                                                              SELECT  `id` 
                                                                              FROM  `b_order` 
                                                                              WHERE  `b_order`.user = :user
                                                                              ) 
                                               AND  `Param`.`name` LIKE  '%Формат%'
                                      )", array(
                                          ':user' => $user
                                      ));
      $p = $modx->getObject('LinkOrderParams',$s);
      
      
      $s = $p->value;