Skip to content

loktionov/dowlatow

Repository files navigation

Задание на вакансию PHP-программист

preview

  1. MySQL

Дана структура и данные статей и категорий сайта. Требуется написать запрос, которым мы получим по 2 статьи каждой категории.

Дамп БД

Решение

SELECT b.rn, b.cat_id, b.art_id, b.article, b.category FROM (
SELECT     
  @rn:=CASE WHEN a.cat_id = @cat_id THEN @rn + 1 ELSE 1 END AS rn,
  @cat_id:=a.cat_id AS cat, 
  a.*
  FROM 
  
    (
      SELECT 
        c.id AS cat_id,
        a.id AS art_id,
          a.title AS article,        
          c.title as category 
    FROM articles_categories ac
    JOIN articles a ON a.id=ac.article_id
    JOIN categories c ON c.id=ac.category_id      
    ORDER BY c.id, article
    ) a 
  
  ) b
 
 WHERE b.rn <= 2

Используется эмуляция функции ROW_NUMBER() SQLServer

  1. PHP-framework Yii2

На любом php фреймворке или CMS, с использованием библиотеки jQuery сделать следующее: На странице 3 рандомных числа. Нажимая на любое число - числа ajax'ом сменяются. Если обновляем страницу - числа должны оставаться те, что есть. Числа хранить ТОЛЬКО в сессии, не в куках.

Controller

    /**
         * Displays homepage.
         *
         * @return string
         */
        public function actionIndex()
        {
    
            return $this->render('index', ['values' => self::getRandValues(true)]);
        }
    
        public function actionAjax()
        {
            if (!Yii::$app->request->isAjax) {
                Yii::$app->end();
            }
            echo json_encode(self::getRandValues());
            Yii::$app->end();
        }
    
        /**
         * @param bool $from_session
         * @return array
         */
        public static function getRandValues($from_session = false): array
        {
            if ($from_session) {
                $session = Yii::$app->session;
                if (empty($session['values'])) {
                    $values = self::getRandArray();
                } else {
                    $values = unserialize($session['values']);
                    if ($values === false OR !is_array($values) OR count($values) != 3) {
                        $values = self::getRandArray();
                    }
                }
            } else {
                $values = self::getRandArray();
            }
            return $values;
        }
    
        /**
         * @return array
         */
        private static function getRandArray(): array
        {
            $values = array_map(function () {
                return mt_rand(100, 999);
            }, [0, 0, 0,]);
            Yii::$app->session['values'] = serialize($values);
            return $values;
        }

View

<div id="digits-container">
    <div>
        <?php foreach ($values as $k => $v) { ?>
            <div class="digits" id="digit<?= $k ?>">
                <?= $v ?>
            </div>
        <?php } ?>
    </div>
</div>

JavaScript

$(document).ready(function () {
    $('.digits').click(function () {
        $.ajax({
            url: '/?r=site/ajax',
            dataType: 'json',
            success: function (data) {
                $.each(data, function (i, v) {
                    $('div#digit' + i).html(v);
                })
            }
        });
    })
});

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published