Установить переменную на codeigniter SQL


Я пробовал этот код:

SET @num := 0, @type := NULL;
SELECT categories_name, products_name, products_url, categories_id, 
       @num := IF( @type = categories_name, @num +1, 1 ) AS row_number,
       @type := categories_name AS dummy
  FROM (
        SELECT categories_name, products_name, products_url, ptc.categories_id
          FROM toc_products_description pd
         INNER JOIN toc_products_to_categories ptc ON pd.products_id = ptc.products_id
         INNER JOIN toc_categories_description cd ON cd.categories_id = ptc.categories_id
               AND pd.language_id =1
               AND cd.language_id =1
        ) AS x
 GROUP BY x.categories_name, x.products_name, x.products_url, x.categories_id
HAVING row_number <=2

На SQL (и хорошо работает), и теперь мне нужно, чтобы этот код был реализован на codeigniter с query(). Проблема в том, что я не могу вставить

SET @num := 0, @type := NULL;

На query (), потому что он всегда выдает сообщения об ошибках, когда я вставляю его.

Я сделал это:

$query="SELECT categories_name, products_name, products_url, categories_id, @num := IF( @type := categories_name, @num +1, TRUE) AS row_number, @type := categories_name AS dummy
                FROM (
                SELECT categories_name, products_name, products_url, ptc.categories_id
                FROM toc_products_description pd
                INNER JOIN toc_products_to_categories ptc ON pd.products_id = ptc.products_id
                INNER JOIN toc_categories_description cd ON cd.categories_id = ptc.categories_id
                AND pd.language_id =1
                AND cd.language_id =1
                ) AS x
                GROUP BY x.categories_name, x.products_name, x.products_url, x.categories_id
                HAVING row_number <=5";        
        $result = $this->db->query($query);

И я не могу ничего написать, прежде чем выбрать синтаксис, потому что он вернет сообщение об ошибке, когда я попробую его.

3 2

3 ответа:

Для этого вам придется выполнить два отдельных запроса

$query  =   "SET @num := 0, @type := NULL";
$this->db->query($query);
$new_query  =   "
                SELECT categories_name, products_name, products_url, categories_id, 
                       @num := IF( @type = categories_name, @num +1, 1 ) AS row_number,
                       @type := categories_name AS dummy
                  FROM (
                        SELECT categories_name, products_name, products_url, ptc.categories_id
                          FROM toc_products_description pd
                         INNER JOIN toc_products_to_categories ptc ON pd.products_id = ptc.products_id
                         INNER JOIN toc_categories_description cd ON cd.categories_id = ptc.categories_id
                               AND pd.language_id =1
                               AND cd.language_id =1
                        ) AS x
                 GROUP BY x.categories_name, x.products_name, x.products_url, x.categories_id
                HAVING row_number <=2";
$this->db->query($new_query);               

Создайте хранимую процедуру с помощью SQL и вызовите хранимую процедуру из query ()

Запишите в модель

public function select_datos($param1) {
    if ($param1 == 'planilla') {
        $query1 = "SET @numero := 0, @type := NULL";
        $this->db->query($query1);
        $this->db->select('*');
        $this->db->select("@numero:=@numero+1 AS 'posicion'");
        $this->db->from($param1);
        $query = $this->db->get();
        $row['planilla'] = $query->row();
    } else {
        $query = '1'; //    Error
    }
    return $query->result();
}