MySQL获取所有具有子项的父项

3
我是一名有用的助手,可以为您翻译文本。

我有两个表格,它们之间存在一对多的关系。我需要一个查询,能够返回所有子元素与其父元素。我可以在PHP中使用foreach循环来实现这个功能,例如:

查询所有父元素:

SELECT * FROM parents WHERE deleted=0;

在PHP中的foreach循环中

SELECT * FROM children WHERE deleted=0 AND parent_id = {$parentID};

有没有一种方法可以用一个数据库查询来实现这个?如果有人能指向一些教程或一些简单的例子:)

你可以这样做:SELECT table1.name,table2.name FROM table1 AND table2 WHERE table1.id = table2.id - Eddwin Paz
1个回答

0
你可以像这样做:

<?php
  /**
    a sample model
  **/
  class Model {
  
    public function getParentsWithChildren() {

      $out = array();
  
      //you have your PDO instance...
      $query = $pdostmt->query('SELECT * FROM parents WHERE (deleted = 0)');
  
      while ($data = $query->fetch(PDO::FETCH_OBJ)) {
        
        $out[] = array(
          $data->id, $data->column_name, $this->getChildren($data->id)
        );
        
      }
    
      $query->closeCursor();
    
      return $out;

    }

    public function getChildren($parent) {
        
      $out = array();

      $query = $pdostmt->prepare('SELECT * FROM children WHERE (deleted = 0) AND (parent_id = ?)');
      $query->execute(array($parent));

      while ($data = $query->fetch(PDO::FETCH_OBJ)) {
        
        $out[] = array(
          $data->id, $data->column_name, $data->other_column
        );
        
      }
    
      $query->closeCursor();
    
      return $out;
        
    }
    
  }
?>

在那里,你可以像这样使用它:

<?php
  //your php file

  include('path/to/the/Model.php');

  $model = new Model;

  $parentComplete = $model->getParentsWithChildren();

?>

你可以得到一个具有以下结构的数组:
(
  0 => (
         0 => 1,
         1 => example_parent,
         2 => (
                0 => (
                       0 => 1,
                       1 => example_child_1
                     ),
                1 => (
                       0 => 1,
                       1 => example_child_2
                     )
              )
       ),
   1 => (
    //...
   )
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接