복붙노트

[SQL] 어떻게 CodeIgniter의의 활동 기록에이 SQL을 다시 작성할 수 있습니까?

SQL

어떻게 CodeIgniter의의 활동 기록에이 SQL을 다시 작성할 수 있습니까?

SELECT *, SUM(tbl.relevance) AS relevance FROM
(
    (
        SELECT q_id,
        MATCH(a_content) AGAINST ('бутон') AS relevance
        FROM answers

        WHERE
        MATCH(a_content) AGAINST ('бутон')
    )
    UNION
    (
        SELECT q_id,
        (MATCH(q_content) AGAINST ('бутон')) * 1.5 AS relevance
        FROM questions

        WHERE
        MATCH(q_content) AGAINST ('бутон')
    )
) AS tbl

JOIN questions ON questions.q_id = tbl.q_id

GROUP BY tbl.q_id
ORDER BY relevance DESC

해결법

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

    1.CodeIgniter는 현재의 액티브 레코드 클래스의 서브 쿼리를 지원하지 않습니다.

    CodeIgniter는 현재의 액티브 레코드 클래스의 서브 쿼리를 지원하지 않습니다.

    당신은 단순히이를 사용해야합니다 :

    $this->db->query($your_query, FALSE);
    

    CodeIgniter의 검색어를 탈출하지 않도록, 그 두 번째 인수를 전달해야합니다.

  2. ==============================

    2.그런데 참으로 CodeIgniter의에서 하위 쿼리에 대한 간단한 해킹있다. 당신은 다음을 수행해야 시스템 / 데이터베이스 / DB_active_rec.php로 이동

    그런데 참으로 CodeIgniter의에서 하위 쿼리에 대한 간단한 해킹있다. 당신은 다음을 수행해야 시스템 / 데이터베이스 / DB_active_rec.php로 이동

    거기 당신은 버전 2.0 이상 변경이를 사용하는 경우

    public function _compile_select($select_override = FALSE)
    public function _reset_select()
    

    공공 키워드를 제거하고 당신은 하위 쿼리를 사용할 수 있습니다 그리고 지금

    $data   =   array(
                 "q_id",
                 "MATCH(a_content) AGAINST ('?????') AS relevance"  
             );
    
    $this->db->select($data);
    $this->db->from("answers");
    $this->db->where("MATCH(a_content) AGAINST ('?????')");
    $subQuery1 = $this->db->_compile_select();
    // Reset active record
    $this->db->_reset_select();   
    
    unset($data);
    $data   =   array(
                "q_id",
                "(MATCH(q_content) AGAINST ('?????')) * 1.5 AS relevance"   
            );
    
    $this->db->select($data);
    $this->db->from("questions");
    $this->db->where("MATCH(q_content) AGAINST ('?????')");
    $subQuery2 = $this->db->_compile_select();
    // Reset active record
    $this->db->_reset_select(); 
    
    unset($data);
    $data   =   array(
              "q_id",
              "SUM(tbl.relevance) AS relevance" 
             );
    
    $this->db->select($data);
    $this->db->from("$subQuery1 UNION $subQuery2");
    $this->db->join("questions","questions.q_id = tbl.q_id");
    $this->db->group_by("tbl.q_id");
    $this->db->order_by("relevance","desc");
    $query = $this->db->get();
    
  3. ==============================

    3.당신은 하위 쿼리없이이 쿼리를 시도 했습니까? 나는 당신이 왼쪽 조인 및 IS NOT NULL의 사용과 서브 쿼리의 사용없이 그것을 할 수 있다고 생각합니다.

    당신은 하위 쿼리없이이 쿼리를 시도 했습니까? 나는 당신이 왼쪽 조인 및 IS NOT NULL의 사용과 서브 쿼리의 사용없이 그것을 할 수 있다고 생각합니다.

  4. from https://stackoverflow.com/questions/10502778/how-can-i-rewrite-this-sql-into-codeigniters-active-records by cc-by-sa and MIT license