Example #1
0
 /**
  * Фильтрует статьи из базы данных по автору, по категории
  * и по дате публикации
  *
  * @param reference $conn Соединение с БД
  * @param int $authId Идентификатор автора статьи
  * @param int $catId Идентификатор категории
  * @param datetime $pubDate Дата публикации статьи
  * @return object[]
  */
 public static function Find($conn, $authId = NULL, $catId = NULL, $pubDate = NULL)
 {
     // Формируем условия для фильтрации статей
     $q = "Select Articles.ID, Articles.Name, Articles.Content, Articles.PubDate,\n\t\t\t\t\tCategory.ID, Category.Name,\n\t\t\t\t\tAuthors.ID, Authors.Name\n\t\t\t\tFrom Category,\n\t\t\t\t\tArticles Left Outer Join ArtAuth On ArtAuth.ID_Article = Articles.ID\n\t\t\t\t\tLeft Outer Join ArtCat On ArtCat.ID_Article = Articles.ID\n\t\t\t\t\tLeft Outer Join Authors On Authors.ID = ArtAuth.ID_Author\n\t\t\t\tWhere ArtAuth.ID_Author = Authors.ID and ArtCat.ID_Category = Category.ID";
     if (isset($authId) && $authId >= 0) {
         $q = $q . " And Authors.ID = {$authId}";
     }
     if (isset($catId) && $catId >= 0) {
         $q = $q . " And Category.ID = {$catId}";
     }
     if (isset($pubDate)) {
         if ($pubDate == -2) {
             $q = $q . " And TO_DAYS(NOW()) - TO_DAYS(Articles.PubDate) <= 7";
         } elseif ($pubDate == -3) {
             $q = $q . " And TO_DAYS(NOW()) - TO_DAYS(Articles.PubDate) <= 365";
         }
     }
     /** @var reference Запрос в базу данных */
     $res = $conn->query($q);
     /** @var array[] Массив объектов класса Article */
     $articles = array();
     while ($article = $res->fetch()) {
         $id = $article[0];
         $auth = NULL;
         if (isset($article[6])) {
             $auth = new Author($article[6], $article[7]);
         }
         $id = $article[0];
         if (isset($articles[$id]) && isset($auth)) {
             $arr = $articles[$id]->authors;
             $arr[] = $auth;
             $articles[$id]->authors = $arr;
         } else {
             $articles[$id] = Article::Init($id, $article[1], $article[2], $article[3], new Category($article[4], $article[5]), new Author($article[6], $article[7]), $auth);
         }
     }
     return $articles;
 }