gpt4 book ai didi

codeigniter group_by 只返回第一行

转载 作者:行者123 更新时间:2023-12-04 15:13:46 29 4
gpt4 key购买 nike

我在 codeigniter 中有这个问题:
我尝试从数据库制作导航树系统。

模型:

function getServices()
{
$this->db->select('service_url, service_title, category_title');
$this->db->join('services_category', 'services_category.id=services.category_id');
$this->db->group_by('category_title');
$this->db->order_by('service_title', 'ASC');
$query = $this->db->get('services');

if($query->result() == TRUE)
{
foreach($query->result_array() as $row)
{
$result[] = $row;
}
return $result;
}
}

看法:
<?php if(isset($services) && $services) : foreach($services as $s) : ?>    
<ul>
<li><a href="#"><?php echo $s['category_title'] ?></a>
<ul>
<li><?php echo anchor('services/' . $s['service_url'], $s['service_title']); ?></li>
</ul>
</li>
</ul>
<?php endforeach; ?>
<?php endif; ?>

现在到目前为止一切顺利,结果是按照预期的方式返回每个类别,但该服务每个类别仅返回一项服务,而在某些类别中,大约有 15 项服务。
任何人都可以帮我一把,或者解释一下出了什么问题?
非常感谢。

“我不是php或codeigniter的专家,我刚刚开始不久,所以请不要射击初学者。”

注意:我尝试不使用 group_by 和 order_by,并返回所有服务,但类别重复,

前任:
category-a
service1
category-a
service2
category-b
service10
category-b
service11
category-c
service30
category-c
service31
....

最佳答案

当使用 Group By (MySQL) 时,这是一个很好的聚合函数读物.
一个简单的解释是这样的

Date        | Amount
2012-01-01 | 5
2012-01-01 | 6
2012-01-02 | 1
2012-01-02 | 6

现在使用这样的 SUM 聚合函数。
SELECT Date, SUM(Amount) as Total FROM table GROUP BY Date ORDER BY DATE;

结果将是:
Date        | Amount
2012-01-01 | 11
2012-01-02 | 7

在您的场景中, GROUP BY不会按预期工作,因为它只会得到一个类别,因为您按每个类别对查询进行了分组。

对此的理想解决方案是拥有 2 个独立的函数, GetCategoriesGetServices .
function getServices($category_id = false)
{
$this->db->select('service_url, service_title, category_title');
$this->db->join('services_category', 'services_category.id=services.category_id');
if ($category_id !== false)
$this->db->where('services.category_id', $category_id);
$this->db->order_by('service_title', 'ASC');
$query = $this->db->get('services');

if($query->result() == TRUE)
{
foreach($query->result_array() as $row)
{
$result[] = $row;
}
return $result;
}
}

function getCategories()
{
$this->db->select('category_id, category_title');
$this->db->order_by('category_title', 'ASC');
$query = $this->db->get('services_category');

if($query->result() == TRUE)
{
foreach($query->result_array() as $row)
{
$result[] = $row;
}
return $result;
}
}

然后在您的 View 文件中,您只需要对类别执行 for 循环,然后对每个类别执行另一个查询。这是它的外观轮廓,
<?php if(isset($categories) && $categories) : foreach($categories as $category) : ?>
<ul>
<li><a href="#"><?php echo $category['category_title'] ?></a>
<ul>
// how you get $services is similar to how you get $categories
<?php $services = $this->modelname->getServices($category['category_id']);
<?php foreach($services as $s) : ?>
<li><?php echo anchor('categories/' . $s['service_url'], $s['service_title']); ?></li>
<?php endforeach; ?>
</ul>
</li>
</ul>
<?php endforeach; ?>
<?php endif; ?>

关于codeigniter group_by 只返回第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12925637/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com