【问题标题】:combine 2 SQL statements PHP OOP结合 2 个 SQL 语句 PHP OOP
【发布时间】:2020-03-21 03:30:31
【问题描述】:

我有这 2 个函数执行 2 个不同的查询:

public function getListPerPage($limit, $offset) {
    $dql = "SELECT b FROM Entities\Brain b WHERE b.status = '1' ORDER BY b.id DESC";
    $query = $this->getEntityManager()->createQuery($dql);

public function getHiddenItems($limit, $offset, $brain_user_id) {
    $dql = "SELECT b FROM Entities\Brain b WHERE b.status = '2'
            AND b.user = :brain_user_id ORDER BY b.id DESC";
    $query = $this->getEntityManager()->createQuery($dql);
    $query->setParameter('brain_user_id', $brain_user_id);

我想将它们合并到一个函数和一个查询中,如何将这两个语句合并到一个查询中?

我在阅读许多其他问题时尝试使用 UNION,但对我不起作用。

我尝试使用 UNION 的方式是:

"(SELECT b FROM Entities\Brain b WHERE b.status = '1')
  UNION (SELECT b FROM Entities\Brain b WHERE b.status = '2'
  AND b.user = :brain_user_id) ORDER BY b.id DESC";

给我一​​个错误,也许我的语法错误?

【问题讨论】:

  • 使用 UNION 显示您的非工作版本。使用Edit将其添加到您的问题中。
  • 提到为什么要将两个查询合二为一?您想要一个数据库请求以提高性能吗?
  • @PM77-1 添加了 UNION 版本
  • @Hamid 对于我正在创建的函数,我需要它作为一个请求。
  • 您有两个不同的 where 条件,因此您可以使用 SELECT b FROM Entities\Brain b WHERE (b.status = '2' AND b.user = :brain_user_id) or (b.status = '1') ORDER BY b.id DESC 之类的内容进行一个简单的查询,然后在代码中分隔每个条件。它很容易编辑,而且速度也足够快,因为您对数据库引擎有一个请求,并且foreach 的离线数据足够快

标签: php sql codeigniter


【解决方案1】:

只需使用一种模型方法,将每个查询的结果存储在一个单独的变量中,然后将包含两个结果的数组(或对象,您的选择)返回给控制器。

例如:

public function getListAndHiddenItems($limit, $offset, $brain_user_id)
{
  $this->load->database();
  $this->db->select('fields');
  $this->db->from('table_one');
  $query = $this->db->get();

  $list = $query->result();

  $this->db->select('other_fields');
  $this->db->from('table_two');

  $query = $this->db->get();
  $hidden = $query->result();

  $result = array('list' => $list, 'hidden' => $hidden);

  return $result;
}

在每个查询中添加您需要的任何子句、连接等。您只需要从控制器调用这个单一方法,就可以在不同的数组元素中获得两个结果集

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多