MYSQL Query statment для замены циклов PHP - PullRequest
0 голосов
/ 08 июля 2011

Предположим, у меня есть следующие таблицы:

  • проекты (идентификатор_проекта, имя_проекта)
  • документы (идентификатор_документа, имя_документа, идентификатор_проекта)

, который является иерархическим видом сверху вниз, я использую оператор SELECT и циклы для генерации вложенного массива, например:

$result_array = array();
$projects = mysql_query(' SELECT * FROM projets') ;
$i = 0 ;
while( $row_proj = mysql_fetch_assoc($projects)  )
{
   $result_array[$i] = $row_proj ; 
   $documents = mysql_query('SELECT * FROM documents WHERE project_id='.$row['project_id']);
   $doc_res = array();
   while( $row_doc = mysql_fetch_assoc($documents) 
   { 
       $doc_res[] = $row_doc;
   }
   $result_array[$i]['documents'] = $row_doc ; 
   $i++;
}
.. and so on 

результат является вложенным массивом, так что в поле зрения я могу напечатать его следующим образом:

foreach( $projects as $project )
{
  echo $project['project_name'];
  foreach( $project['documents'] as $document )
  {
     echo ..
  }
}

как я могу сгенерировать это, используя простой плоский цикл, используя SQL-статистику или любую другую вещь, этот способ кажется не лучшим, иногда я использую соединение, но оно не генерирует такие вещи, как вложенный массив.

1 Ответ

2 голосов
/ 08 июля 2011

Если я понимаю, чего вы хотите добиться, я бы сделал:

SELECT * FROM documents 
INNER JOIN projects ON projects.id = documents.project_id 

Затем переберите все документы, чтобы сгруппировать их в массивы по project_id с PHP.У вас снова будет один запрос.Можно сделать цикл MySQL, но это было бы ужасно, и для приведенного выше примера это не даст вам никакого преимущества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...