• Есть ли у Хабра ограничение на длину поста?

    @AlikDex
    Полагаю, 64кб текста(включая теги, пробелы, спецсимволы). Склонен считать, что в качестве бд используют мускул, а поле для тела статьи имеет тип text.
    Ответ написан
    Комментировать
  • Как в Yii2 в get запросе убрать название формы?

    @AlikDex
    Если понимаете о чем речь, то ответ тут:
    stackoverflow.com/questions/21779085/yii2-how-does...

    А если развернуто нужно, то получится довольно объемно =)
    Могу позже расписать. Либо вечером, либо завтра, если нужно.
    Ответ написан
    Комментировать
  • Как правильно организовать сортировку элементов с сохранением в базе данных их позиций?

    @AlikDex
    1) При использовании UISortable индексы не будут повторяться, если сериализовать массив элементов. Инструмент для этого у виджета есть.
    2) Когда создаете новый элемент, первым этапом проверяете правильность пришедших данных, затем выдергиваете максимальный индекс из базы с учетом текущей ветки, если это дерево, потом добавляете в базу с этим индексом + 1. Запрос будет выглядеть примерно так:
    SELECT MAX(`position`) FROM `my_table` WHERE `parent_id`=@current_parent -- @current_parent это ид текущего родителя. Если для хранения используется adjacency list, например.


    Собственно и все.
    Ответ написан
    Комментировать
  • Как перевести mysql запрос в Active Record Yii2?

    @AlikDex
    Ideas::find()
        ->select(['i.id', 'i.src_small as src']) // Возможно просто одной сторокой select('i.id, i.src_small as src'). Проверить под рукой правильность нет.
        ->from(['i' => Ideas::tableName()])
        ->join('JOIN', ['f' => IdeasFilters::tableName()], 'f.id=i.id') // USING в yii2 нету поэтому так
        ->where(['f.filter' => $array]) // $array чистый массив в 1 колонку с числовыми индексами 0,1,2 etc. В общем обычный массив вида [23,43,52]
        ->groupBy('i.id')
        ->having(['COUNT(DISTINCT f.filter)' => count($array)])
        ->orderBy(['i.id' => SORT_DESC])
        ->all(); // или one() смотря что нужно.

    Классы названы стандартно при создании моделей через gii. Если у вас другие модели, то измените название. В целом должно работать.

    P.S.
    Забыл. У модели Ideas нужно будет добавить свойство
    public $src;
    Т.к. дефолтно его нет, но для объекта AR оно будет использоваться(в запросе есть i.src_small as src). Однако Yii не позволит создать "на лету" это свойство, и поэтому надо его прописать.
    Ответ написан
    3 комментария
  • Как составить сложный SQL запрос?

    @AlikDex
    группировать по дням, выбирать за последнюю неделю, считать подписчиков
    т.е. примерно
    SELECT DATE(FROM_UNIXTIME(`created_at`)) AS `dt`, COUNT(`id`) AS `cnt`
    FROM `account_analytics`
    WHERE `created_at` > UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, INTERVAL 6 DAY))
    GROUP BY DATE(FROM_UNIXTIME(`created_at`));

    Не проверял, не знаю работает или нет, но думаю ход мысли понятен.
    Либо может GROUP BY `dt` сработает, чтоб не считать снова.
    Для аккаунта тож самое будет, тока с указанием ида аккаунта во WHERE,

    И для именно этого случая я бы делал колонку created_at не timestamp, а полноценной datetime и юзал мускульные функции без преобразований. Это проще намного, хоть и немного затранее по памяти.
    Ответ написан
    Комментировать
  • Как оптимизировать JOIN больших таблиц (3млн строк)?

    @AlikDex
    Если названия брендов(или другие параметры) не учавствуют в выборке, то можно и не джойнить совсем.
    Технология проста по сути. Тянешь нужные товары первым запросом, затем формируешь список уникальных айди брендов этих товаров.
    Далее по списку айдишников вторым запросом тащишь сами бренды:
    SELECT `brand_id`, `brand_name`
    FROM `brands`
    WHERE `brand_id` IN (1,3,4,7);

    и выводишь их на странице как-то так:
    $brand_id = $product['brand_id'];
    if (isset($brand[$brand_id])) { // $brand - массив брендов [id][title] из второго запроса
        echo htmlspecialchars($brand[$brand_id]['brand_name']);
    }


    Если брендов не много(пару сотен), можно их все дернуть одним запросом и закешировать в нужном виде.
    Ответ написан
    Комментировать
  • Как оптимизировать данный запрос?

    @AlikDex
    Насколько я понял нужна выборка по месяцу? Как-то так.
    SELECT @dt:=EXTRACT(YEAR_MONTH FROM '2016-12-01'); -- Дополнить вашу дату до полного формата
    SELECT id, reg_num, reg_date, Theme, List_doc, List_add, Contractor, type_send, Send_date 
    FROM registry
    WHERE EXTRACT(YEAR_MONTH FROM reg_date) = @dt AND EXISTS(SELECT `letterId` FROM `recipients` WHERE letterId = registry.id LIMIT 1)
    ORDER BY reg_num ASC

    Поскольку с реципиента вы ничего не выбираете, значит можно проверить просто его существование. Тогда отпадает необходимость в группировке.
    и отдельный индекс по reg_num
    Также проверить индекс на reg_date Чот судя по експлейну его нет =)
    Ответ написан
  • Как перенести проект с Codeigniter на Yii2?

    @AlikDex
    Приходилось делать такое =)
    Как я делал. Сначала переработал бд, затем переписал CI под эту бд. Поставил все на рабочий сайт. Потихоньку начал переделывать морду сайта ипользуя Yii2 (на зеркале) не добавляя ничего нового. Просто повторяя тот старый функционал(благо его немного). Когда морда была закончена и протестирована - поставил ее. Админка уехала на домен 3 уровня и осталась на CI. Чуть позже также была переделана с минимальным необходимым и установлена как рабочая.

    Самым трудным было переписать код игнайтер под новую бд, т.к. бесил до состояния "аж трисет!". Но если базу не надо переделывать, то тут вообще нет проблем. Просто брать и пилить все по новой. А старое пусть работает пока так.

    Совмещать 2 фреймворка, как написал index0h: это по моему черезчур усложнено. Тут главное не торопится =) Хотя, наверное, смотря какой проект...
    Ответ написан
    Комментировать
  • PDO проверка существует ли значение в таблице БД?

    @AlikDex
    SELECT EXISTS(SELECT 1 FROM test2 WHERE id ='321321' LIMIT 1)

    stackoverflow.com/questions/1676551/best-way-to-te...
    $stmt = $dbh->prepare('SELECT EXISTS(SELECT 1 FROM user_s WHERE id =:id LIMIT 1)');
    $stmt->bindValue(':id', $id, PDO::PARAM_INT);
    $stmt->execute();
    if ($stmt->fetch(PDO::FETCH_NUM)) {
    // exists
    }
    Ответ написан
  • Как в yii2 указать путь для картинки с backend на frontend?

    @AlikDex
    Ответ вроде на поверхности лежит. Задайте жесткие алиасы путей до фронтенда в каком-нибудь bootstrap.php в конфиге common. Там же можно задать алиас для урла с привязкой к домену.
    Ответ написан
    Комментировать
  • Почему php сбрасывает значение селектора?

    @AlikDex
    Эхх, пришлось немного наговнокодить ;D
    <?php
    $paymentOptions = [
    	'ОМС',
    	'ВМП',
    	'Х/Р',
    ];
    
    $errors = [];
    
    if (isset($_POST)) {
    
    	if (empty($_POST['type_of_payment']) || !in_array($_POST['type_of_payment'], $paymentOptions)) {
    		$errors[] = 'Необходимо правильно заполнить тип оплаты';
    	}
    
    	$in_card_number = intval($_POST['in_card_number']);
    	
    	if ($in_card_number === 0) {
    		$errors[] = 'Необходимо правильно заполнить номер медицинской карты';
    	}
    	
    	if (empty($errors)) {
    		// вставляем в бд или че там делаем. Потом редиректим на экран "все ништяк так держать"
    	}
    }
    
    ?>
    
    <form method="post" action="">
    	<?php if (!empty($errors)): ?>
    		<?php foreach ($errors as $error): ?>
    			<?= htmlspecialchars($error) ?><br>
    		<?php endforeach; ?>
    	<?php endif; ?>
    
    	<div>
    		<b>Вид оплаты: </b>
    		<select name="type_of_payment">
    			<?php foreach ($paymentOptions as $paymentOption): ?>
    				<option value="<?= $paymentOption ?>" <?= (isset($_POST['type_of_payment']) && $paymentOption === $_POST['type_of_payment'])? 'selected' : ''?>><?= $paymentOption ?></option>
    			<?php endforeach; ?>
    		</select>
    	</div>
    	<div>
    		<b>№ медицинской карты стационарного больного: </b>
    		<input type="number" name="in_card_number" value="<?php echo $in_card_number;?>">
    	</div>
    
    	<input type="submit" name="send" id="send" value="Отправить">
    </form>
    Ответ написан
  • Покупной трафик, хорошо ли это?

    @AlikDex
    Я подозреваю, что никакой пользы этот покупной трафик не даст.

    Это не совсем верно. Если вы правильно покупаете целевой трафик, то ваш сайт будет интересен пользователям. А значит его будут смотреть, кликать. Некоторые вернутся позже. Т.е. будут высокие ПФ и хороший % возвратов. Это всегда + для поисковиков.

    Так что правильный ответ на вопрос
    Может ли это повлиять на поднятие сайта в выдаче поисковиков?

    Да повлияет, в положительную сторону. Но, при условии грамотного подхода. Мусорный трафик только испортит.
    Ответ написан
    Комментировать
  • Как в Yii2 строить запросы в конструкторе с JOIN?

    @AlikDex
    Comments::find()
        ->select('с.text, с.date_create, с.firstname, с.lastname')
        ->from([Comments::tableName() . ' с'])
        ->innerJoin('{{%users}} as u', 'с.user_id  = u.id')
        ->where(['с.status' => Comments::STATUS_PUBLIC])
    Ответ написан
    Комментировать
  • Тормозит mysql, это кэш?

    @AlikDex
    не будет браться из кеша, т.к. запрос другой. Мускул кеширует по строке запроса, т.е. она должна быть идентичной абсолютно. Но также принимаются во внимание некоторые функции. Например запросы с функцией NOW() не кешируются вообще.
    Ответ написан
    Комментировать
  • Почему union так сильно замедляет запрос?

    @AlikDex
    VQ5XP.png
    если коротко, то одним запросом выбрать все явно не прочитанные. Т.е. выбираем только те, которые присутствуют во второй таблице через RIGTH JOIN ... ON A.Key=B.Key. А другим запросом используя юнион олл, и выбираем все явно прочитанные, через конструкцию RIGTH JOIN ... WHERE A.Key IS NULL, таким образом исключая дубли и два запроса останутся быстрыми
    Ответ написан
  • Обрезать картинку, с определенным соотношением сторон?

    @AlikDex
    делаете блок с соотношением 2x3
    в него вставляете картинку со следующим цсс:
    display: block;
    width: 100%;
    object-fit: cover;


    ключевое правило
    object-fit: cover;

    Если нужны картинки разных размеров с заданным соотношением, то средствами цсс это будет сделать проблематично.
    Ответ написан
  • Yii 2 не видит эшен?

    @AlikDex
    для экшенов контроллеров модуля надо правило несколько другое:
    '<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',

    Это разумеется првило для всех.
    кастомно будет несколько иначе. Например убрать из урла myshop:
    '<controller:\w+>/<action:\w+>' => 'myshop/<controller>/<action>',
    Ответ написан
    Комментировать
  • Как сделать сайт на laravel5?

    @AlikDex
    например логотип прописываем прямо через тег img в шаблоне. Никакие сраные виджеты для этого не нужны, равно как и редактирование в админке. Операция одноразовая, можно и ручками поправить в случае чего. А с виджетом эта хрень будет генерится при каждом вызове. Оно вам надо?

    Комментарии ищем готовые модули. Смотрим подходят ли они нам. Если да, то ставим. Нет - переделываем наиболее близкий, либо пишем новый.

    Контроль доступа. Зависит от задачи. Если пользователей разделить на админ\не админ то достаточно добавить флаг в таблице пользователя. Если что-то посложнее, то стоит поискать какие-то расширения\модули\бандлы. Как они там называются. Короче посмотреть что есть готовое, вероятно оно вам уже подойдет. Если что-то нестандартно и извращенское, то сам писать конечно, предварительно изучив способы решения задачи.
    Ответ написан
  • Как переопределить стили виджета?

    @AlikDex
    Можно в кофиге компонент переопределить, делается это так:
    'assetManager' => [
            'bundles' => [
                'some\namespace\SomeAsset' => [
                    'sourcePath' => '@web/myassets/folder',   // redeclare default folder
                    'css' => [
                        'my_widget_style.css',
                        'other_style.css',
                    ],
                    'js' => [
                    ],
                    'depends' => [
                    ],
                ],
            ],
        ],
    Ответ написан
    Комментировать
  • Как заменить одну строку таблицы на другую или изменить цвет фона?

    @AlikDex
    while($row = $result->fetch_assoc())
          {
            $user = $row['username'];
            $amount = $row['money'];
    
            if($user == $nickname)
            {
              echo "
              <tr style='background: red;'>
                <td>".$user."</td>        
                <td>".$money."</td>
              </tr>
              ";
            } else {
            echo "<tr class=\"table-row\"><td>".$user."</td>";
            echo "<td>".$money."</td></tr>";
    }
          }
    Ответ написан