Несколько запросов в одно и то же время в CodeIgniter - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь сделать несколько запросов одновременно, эти запросы строятся по частям (я не могу это изменить), проблема в том, что codeigniter запоминает статус и пытается создать один запрос.

Проблема заключается в следующем:

$queryA = $this->db->select("SELECT fieldA")
->from("tableA");

$queryB = $this->db->select("SELECT fieldB")
->from("tableB");

$queryC = $this->db->select("SELECT fieldC")
->from("tableC");

/* Group bys */
$queryA->group_by("groupbyfieldA");
$queryB->group_by("groupbyfieldB");

/* Limits */
$queryB->limit(10);
$queryC->limit(30);

$rA = $queryA->get()->result();
$rB = $queryB->get()->result();
$rC = $queryC->get()->result();


/* Desired output */
SELECT fieldA FROM tableA GROUP BY groupbyfieldA
SELECT fieldB FROM tableB GROUP BY groupbyfieldB LIMIT 10
SELECT fieldC FROM tableC LIMIT 30

/* CodeIgniter output :( */
SELECT fieldA, fieldB, fieldC FROM (tableA, tableB, tableC) GROUP BY groupbyfieldA, groupbyfieldB LIMIT ?

Единственное решение, которое я нашел, - это изменить порядок создания запросов, но должно быть более простое решение, предоставляемое CodeIgniter. Нельзя ли избежать того, что $ this-> db запоминает предыдущий запрос и что $ queryA, $ queryB, $ queryC - единственные, которые сохраняют информацию?

Большое спасибо!

1 Ответ

0 голосов
/ 11 мая 2018

Попробуйте это так

 $resultA= $this->db->select("SELECT fieldA")
 ->from("tableA")->groupby()->get()->result();

 $resultB= $this->db->select("SELECT fieldB")
 ->from("tableB")->groupby()->get()->result();

 $resultC= $this->db->select("SELECT fieldC")
 ->from("tableC")->groupby()->get()->result();

"Проблема" в том, что кодовый указатель $this->db использует каждый раз один и тот же объект, и каждый раз, когда вы выполняете запрос, он принимает все значения (каждое select(), groupby(), whatever())при выполнении этого запроса, если он не был сброшен с помощью get().

Один из способов сделать это - выполнить каждый запрос, помните, что метод get() обновляет объект $this->db и позволяет вам выполнить любой другой запрос, который выпотребность (это также освобождает утверждение и, если я правильно помню, закрывает связь с БД).

И хорошо, чтобы получить результаты, просто позвоните result(), result_array() или row($someNumberForTheRow).

Также, если вам нужно сбросить запрос, можно использовать reset_query().

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...