Установить переменную на 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 ответа:
Для этого вам придется выполнить два отдельных запроса
$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);
Запишите в модель
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(); }