我正在尝试访问类别下的所有子类别但不能为我工作。写了这样的代码,
function getAllSubCategory($CatId)
{
$data=array();
$this->db->select('c.catId,c.cat_name,c.cat_alias,c.cat_image,c.parentcatid,c.isHeading');
$this->db->from('coupon_category as c');
$this->db->where('c.parentcatid', $CatId);
$query = $this->db->get();
if($query->num_rows()>0)
{
$data = $dataFetched = $query->result_array();
$query->free_result();
foreach ($dataFetched as $row) {
$this->db->select('c.catId,c.cat_name,c.cat_alias,c.cat_image,c.parentcatid,c.isHeading');
$this->db->from('coupon_category as c');
$this->db->where('c.parentcatid', $dataFetched->catId);
$data = $query->result_array();
$query->free_result();
}
}
echo count($data);
return $data;
}
但是没有工作,不知道我错在哪里。
答案 0 :(得分:0)
问题出在这里
ActiveDocument.Bookmarks("TetraPak100").Range.Paragraphs(1).CollapsedState = False
应该是
SELECT value1, value,
(CASE WHEN GETDATE() BETWEEN '20150801' AND '20160731' THEN 2015
WHEN GETDATE() BETWEEN '20160801' AND '20170731' THEN 2016
ELSE 2014) AS schoolYear
FROM dbTable
WHERE ...
答案 1 :(得分:0)
代码有以下问题:
如果您想获取子类别及其子类别,等等,您 应该使用递归,即使你的表中只有两个级别的子类别,它也会 仍然是很好的代码。
以下是一些使其按照您的方向工作的代码,
使用递归,并使用函数array_merge
随时附加数据。
function getAllSubCategory($CatId)
{
$this->db->select('c.catId,c.cat_name,c.cat_alias,c.cat_image,c.parentcatid,c.isHeading');
$this->db->from('coupon_category as c');
$this->db->where('c.parentcatid', $CatId);
$query = $this->db->get();
$dataFetched = $query->result_array();
$query->free_result();
$data = array();
foreach ($dataFetched as $row) {
$data[] = $row;
$data = array_merge($data, getAllSubCategory($row["catId"]));
}
echo count($data);
return $data;
}
通过执行操作可以获得更好的性能
对数据库的分层查询(例如被要求
here),
但我不知道是否可以使用Active Record。所以我会提供
根据我自己给出的答案,使用简单query()
语法的代码
对于那个特定的问题:
function getAllSubCategory($CatId)
{
$CatId = $this->db->escape($CatId); // sanitise to prevent SQL injection
$query = $this->db->query(
"select c.catId,c.cat_name,c.cat_alias,c.cat_image,c.parentcatid,c.isHeading
from (select * from coupon_category
order by parentcatid, catId) as c,
(select @pv := '$CatId') as initialisation
where find_in_set(c.parentcatid, @pv) > 0
and @pv := concat(@pv, ',', catId)");
$data = $query->result_array();
$query->free_result();
echo count($data);
return $data;
}
请注意,最后一个解决方案需要这样做 对于每条记录 parentcatid< catid ,否则结果将不完整。
但如果是这种情况,这肯定会超过性能的第一个解决方案,因为它只执行一个数据库查询。
此外,如果您的表具有循环,其中节点的子节点也是其父节点(例如),则第一个解决方案将保持循环和查询,直到发生一些内存不足错误。最后一个解决方案不会,因为它只查找 parentcatid< CATID