【问题标题】:Turning 3 SQL queries into 1将 3 个 SQL 查询变成 1 个
【发布时间】:2020-05-24 16:37:01
【问题描述】:

我正在尝试获取日历列表 - 有些是公开的,有些是私有的。对私有日历的访问是通过列出日历 ID (ccalId) 和用户 ID (cuserId) 的桥接表来管理的。我可以做到这一点,但使用 3 个 SQL 查询。

是否可以仅使用一个查询来实现这一目标?我尝试过 JOIN,但它似乎从来没有工作过。

    $calModel->where('calTeam',session()->get('teamId'));
    $calModel->where('calType','public');
    $calModel->where('calStatus','active');
    $data = $calModel->get()->getResultArray();

    $calUserModel->select('ccalId');
    $calUserModel->where('cuserId', session()->get('id'));
    $callist = $calUserModel->get()->getResultArray();
    $newarray = implode(", ", $callist);

    $calModel->where('calTeam',session()->get('teamId'));
    $calModel->whereiI('id', $newarray);
    $data2 = $calModel->get()->getResultArray();

    $data = array_unique(array_merge($data,$data2), SORT_REGULAR); 

【问题讨论】:

  • 这是什么数据库?您能否提供架构、示例数据和预期输出。我在这里看不到任何 SQL 查询。
  • 这是代码点火器 (php) 中的 SQL 构建器
  • 您缺少“来自”子句!这些表是如何相关的? $calModel->whereiI 是错别字
  • 我正在使用模型,所以我不需要指定 from 子句。上面的代码有效。问题是它是否可以简化
  • 它可以简化您的代码并在单个查询中进行这些查询。但是正如@SrinikaPinnaduwage 所说,请提供有关您的数据库的更多信息。

标签: php sql codeigniter


【解决方案1】:

并非每次使用 codeigniter 查询构建器都是最佳解决方案。在我看来,对于更复杂的查询,最好直接查询数据库,而不是使用模型。

您可以轻松地使用 2 个联接进行查询,以获取所有结果而无需无用数据。这会运行得更快,并且在您的代码中看起来更清晰。

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多