복붙노트

[SQL] 젠드 DB를 사용하여 하위 쿼리 작성

SQL

젠드 DB를 사용하여 하위 쿼리 작성

나는 젠드 DB 쿼리에 아래의 SQL을 돌려 몇 가지 문제가 발생하고있다.

$select = ' SELECT s.id, i.id as instance_id, i.reference, i.name, i.sic_code, i.start_date
                FROM sles s
                JOIN sle_instances i
                ON s.id = i.sle_id
                WHERE i.id = (  SELECT MAX(id) 
                                FROM sle_instances 
                                WHERE sle_id = s.id
                                )
                ORDER BY i.name ASC';

내가 전에 멀리 코드와 같이 가지고있다 -하지만 젠드 DB는 제대로 쿼리를 생성하지 않습니다. 하나는 내가 무엇을 놓치고 저를 보여줄 수 ??

$select = $db->select() ->from('sles', array(   'id',
                                                'instance_id'   => 'sle_instances.id',                                                                                          
                                                'reference'     => 'sle_instances.reference',           
                                                'name'          => 'sle_instances.name',
                                                'sic_code'      => 'sle_instances.sic_code',
                                                'start_date'    => 'sle_instances.start_date'
                                             )
                              )
                        ->join('sle_instances', 'sles.id = sle_instances.sle_id')
                        ->where('sles.id = (SELECT MAX(id) FROM sle_instances WHERE sle_id = sles.id)')
                        ->order('sle_instances.name ASC');

는 SQL은 방법으로 작업을 수행합니다. 내가 젠드 매기기 기능을 사용하여 원하는대로 내가 젠드 DB를 사용하여 다시 작성하고 있습니다.

어떤 도움도 대단히 감사합니다.

PJ

해결법

  1. ==============================

    1.이:

    이:

        $select = $db->select()->from(array("s" => "sles"), array("s.id","i.id as instanceid","i.reference","i.name","i.sic_code","i.start_date"))
                                     ->join(array('i' => "sle_instances"),"s.id = i.sle_id",array())
                                     ->where("i.id = (select max(id) from sle_instances where sle_id = s.id)")
                                     ->order('i.name asc');
    

    이것은 제공합니다 :

    "SELECT `s`.`id`, `i`.`id` AS `instanceid`, `i`.`reference`, `i`.`name`, `i`.`sic_code`, `i`.`start_date` FROM `sles` AS `s`
     INNER JOIN `sle_instances` AS `i` ON s.id = i.sle_id WHERE (i.id = (select max(id) from sle_instances where sle_id = s.id)) ORDER BY `i`.`name` asc"
    
  2. ==============================

    2.당신이 원한다면, 당신은 karim79 @ 한 일 걸릴 수 있으며뿐만 아니라 () 선택>은 $ this-으로 부속을 설정 ...

    당신이 원한다면, 당신은 karim79 @ 한 일 걸릴 수 있으며뿐만 아니라 () 선택>은 $ this-으로 부속을 설정 ...

    $subselect = $db->select()
    ->from('sle_instances', array(new Zend_Db_Expr('max(id)')))
    ->where('sle_id = s.id');
    
    $select = $db->select()->from(array("s" => "sles"), 
    array("s.id","i.id as instanceid","i.reference","i.name","i.sic_code","i.start_date"))
    ->join(array('i' => "sle_instances"),"s.id = i.sle_id",array())
    ->where("i.id = ($subselect)")
    ->order('i.name asc');
    
    print($select);
    
    //SELECT `s`.`id`, `i`.`id` AS `instanceid`, `i`.`reference`, `i`.`name`, `i`.`sic_code`, `i`.`start_date` FROM `sles` AS `s` INNER JOIN `sle_instances` AS `i` ON s.id = i.sle_id WHERE (i.id = (SELECT max(id) FROM `sle_instances` WHERE (sle_id = s.id))) ORDER BY `i`.`name` asc
    
  3. ==============================

    3.나는 매우 비슷한 문제가 있었다 나는 다음과 같이 쿼리를 쉽게 기록 할 수 있다는 것을 발견 :

    나는 매우 비슷한 문제가 있었다 나는 다음과 같이 쿼리를 쉽게 기록 할 수 있다는 것을 발견 :

    $select = $db->select()
      ->from (
        array("s" => "sles"), 
        array(
          "s.id",
          "instanceid" => "i.id",
          "i.reference",
          "i.name",
          "i.sic_code",
          "i.start_date")
      )
      ->join(
        array('i' => "sle_instances"),
        "s.id = i.sle_id",
        array()
      )
      ->where ("i.id = (" . 
        $db->select()
        ->from('sle_instances', array(new Zend_Db_Expr('max(id)')))
        ->where('sle_id = s.id');
      .")")
      ->order('i.name asc');
    print($select);
    

    사람들이 이미 여기에 언급 한 것처럼 정확히 동일합니다. 그러나 나는 하위 쿼리 의존성이 더 분명하기 때문에 읽기 조금 더 쉽게 느꼈다.

  4. ==============================

    4.좋은 질문! 이 하나 주셔서 감사합니다. 또한 당신은 주문 후 그룹을하려고하는 경우, 당신은 또한 다음과 매우 유사한하여이 구문을 사용할 수 있음을 던져 원

    좋은 질문! 이 하나 주셔서 감사합니다. 또한 당신은 주문 후 그룹을하려고하는 경우, 당신은 또한 다음과 매우 유사한하여이 구문을 사용할 수 있음을 던져 원

    $subquery = $this->_datawarehouse->select()
                ->from('revenueLog')
                ->where('Date '.$ReturnDate)
                ->order('Date DESC');
    
            $this->view->end = microtime();
            $format = new Zend_Db_Expr('DATE_FORMAT(`Date`,"%d-%m-%y")');
            $select = $this->_datawarehouse->select()
                    ->from(array('subquery'=>$subquery))
                    ->group('Client')
                    ->group($format)
                    ->order('Vertical ASC')
                    ->order('Revenue DESC');
    
            echo $select->__ToString();
            $stmt = $this->_datawarehouse->query($select);
            $data = $stmt->fetchAll();
    

    $ ReturnDate 궁금 누군가를 위해 보통되고 끝나는 사용자 입력에 따라 문자열 인 "BETWEEN '날짜 1'AND 'DATE2'"

  5. from https://stackoverflow.com/questions/1340564/writing-a-subquery-using-zend-db by cc-by-sa and MIT license