【问题标题】:I’m screwing up this LEFT JOIN我搞砸了这个 LEFT JOIN
【发布时间】:2010-05-25 07:49:33
【问题描述】:

我正在对几个表进行左连接。我想要发生的是它列出了所有的业务。然后,它会浏览照片、视频、特价商品和类别。如果有照片,则表格显示是,如果有视频,则表格显示是。

它可以毫无问题地完成所有这些。除了一件事。对于每张照片,它都会多次展示业务。例如,如果一个企业的数据库中有 5 张照片,它会显示该企业五次。

显然,这不是我想要发生的。你能帮忙吗?

function frontPageList() {
    $this->db->select('b.id, b.busname, b.busowner, b.webaddress, p.thumb, v.title, c.catname');
    $this->db->from ('business AS b');
    $this->db->where('b.featured', '1');
    $this->db->join('photos AS p', 'p.busid = b.id', 'left');
    $this->db->join('video AS v', 'v.busid = b.id', 'left');
    $this->db->join('specials AS s', 's.busid = b.id', 'left');
    $this->db->join('category As c', 'b.category = c.id', 'left');
    return $this->db->get();

【问题讨论】:

  • 这是一些看起来很有趣的 SQL。 ;-)

标签: php codeigniter


【解决方案1】:

如果你不关心照片本身,或者它抓取了哪一张,你可以尝试在GROUP BY b.id上添加一个

【讨论】:

  • 谢谢!那解决了它。我做了 $this->db->group_by("b.id");
【解决方案2】:

如果有多个匹配项,则连接将增加行数。如果这不是您想要的,那么您应该从获取计数开始,然后分别查询每个表的实际行,或者您应该根据 business 值何时更改在代码中进行分组。

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多