我试图同时进行多个查询,这些查询是分段构建的(我无法更改它),问题是 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 是唯一保存信息的?
非常感谢!
最佳答案
试试这样
$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
codeigniter 每次使用同一个对象,并且每当您执行查询时都会获取所有值(每个 select()、groupby (),whatever()
) 在该查询执行上,除非通过 get()
重置。
一种方法是执行每个查询,记住方法 get()
刷新对象 $this->db
,并允许您执行任何其他查询你需要(它还释放该语句,如果我没记错的话,它会关闭数据库连接)。
好吧,为了获取结果,只需调用 result()
、result_array()
或 row($someNumberForTheRow)
。
此外,如果您需要重置查询,可以使用reset_query()
。
关于php - CodeIgniter 中 "same time"处的多次查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50291944/