Задать вопрос
  • Как правильно связать таблицы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Или JSON_ARRAYAGG
    SELECT `t`.`id_thing`, `t`.`data`, JSON_ARRAYAGG(`n`.`note`) AS `all_notes`
      FROM `things` AS `t`
      LEFT JOIN `notes` AS `n` ON `n`.`id_thing` = `t`.`id_thing`
      GROUP BY `t`.`id_thing`, `t`.`data`

    Потому как после GROUP_CONCAT будет непонятно, запятая разделяет отдельные `note` или была внутри одного `note`.
    Ответ написан
    1 комментарий
  • Как отобразить в результате запроса количество записей при группировки groupBy?

    @jazzus
    $items = DB::table('table')
        ->whereYear('created_at', 2021)
        ->selectRaw('month(created_at) month, count(*) count')
        ->groupBy('month')
        ->get();
    Ответ написан
    1 комментарий
  • Как решить эту проблему Cannot add or update a child row: a foreign key constraint fails?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы пытаетесь записать строку, в поле productTypeId которой указано значение, отсутствующее в таблице productType.
    Ответ написан
    2 комментария
  • Как написать алгоритм сортировки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Комментировать
  • Как экранировать запрос к базе данных SQLite?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Использовать параметры
    Ответ написан
    6 комментариев
  • Как избежать ошибки database is locked?

    @galaxy
    Sqlite так устроена - читающих соединений может быть много, но пишущее - только одно в каждый момент времени. Причем по умолчанию пишущее соединение заблокирует и всех читателей.
    Чтобы читатели не блокировались, нужно включить WAL
    db.execute("PRAGMA journal_mode=WAL")

    При этом пишущее соединение по-прежнему будет в каждый момент одно. Если это вас не устраивает, вы выбрали неправильный инструмент, и надо смотреть в сторону нормальных серверных СУБД (mysql, postgresql).
    Теоретически могло бы помочь выставление большего таймаута (но я не вижу, как его вообще менять в aiosqlite) или отлов ошибки "database is locked" и повторные попытки.
    Ответ написан
    Комментировать
  • Как сделать, чтобы дата старта не была позднее даты финиша?

    tsklab
    @tsklab Куратор тега SQL Server
    Здесь отвечаю на вопросы.
    CREATE TABLE [dbo].[StartFinish](
    	[DateStart] [datetime] NULL,
    	[DateFinish] [datetime] NULL
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[StartFinish] WITH CHECK 
      ADD CONSTRAINT [CK_StartFinish] CHECK ((datediff(day,[DateStart],[DateFinish])>(0)))
    GO
    ALTER TABLE [dbo].[StartFinish] CHECK CONSTRAINT [CK_StartFinish]
    GO

    Руководство.
    Ответ написан
    Комментировать
  • Как привести к числу строку в mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    У художника Франсиско Гойи есть известная картина, "Сон разума рождает чудовищ".
    Вот этот запрос как раз и есть такое чудовище.

    Он тем смешнее, что БД как раз и приводит строку 3, 5, 7 к числу. Получая в результате единственно возможный результат - 3.

    Надо не маяться дурью с group_concat, а просто сделать отдельный запрос к таблице авторов. И перебрав в цикле записи первой таблицы добавить к каждой подмассив с авторами.

    Либо сделать нормальный джойн и сгруппировать в вызывающем скрипте
    Ответ написан
    5 комментариев
  • Как объединить текст из нескольких строк в одну текстовую строку?

    tsklab
    @tsklab Куратор тега SQL Server
    Здесь отвечаю на вопросы.
    CONCAT

    DECLARE @TextProduct NVARCHAR(MAX);
    SELECT @TextProduct = CONCAT_WS( ', ', @TextProduct, [OrganizationCustomerId])
      FROM [AZone2Adapter].[dbo].[_data_OrganizationCustomerSpecialties]
      WHERE [OrganizationCustomerId]='1002775640209670'
    SELECT @TextProduct AS TextProduct


    Microsoft SQL Server 2008


    DECLARE @TextProduct NVARCHAR(MAX);
    SELECT @TextProduct = STUFF(COALESCE(', ' + @TextProduct, '') 
                              + COALESCE(', ' + [OrganizationCustomerId], ''), 1, 2, '')
      FROM [AZone2Adapter].[dbo].[_data_OrganizationCustomerSpecialties]
      WHERE [OrganizationCustomerId]='1002775640209670'
    SELECT @TextProduct AS TextProduct
    Ответ написан
    4 комментария
  • Как правильно настроить PHP mailer?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Перед настройкой почтового клиента в меню «Настройки» почтового ящика на вкладке «Почтовые программы» необходимо отметить флажок в пункте «Я хочу получить доступ к почтовому ящику с помощью почтового клиента».
    https://help.rambler.ru/mail/mail-pochtovye-klient...


    Ну и помимо этого, никогда не надо выдавать себя за кого-то другого. За фишинг могут больно побить палками. Времена, когда во from можно было подставить какой угодно адрес, давно прошли.
    Ответ написан
    2 комментария
  • Почему я получаю ошибку 500?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это написано в логе ошибок веб-сервера.
    Ответ написан
    Комментировать
  • Что такое instance и как это настроить?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Что такое instance


    Вообще Instance - это экземпляр. В данном случае экземпляр MySQL-сервера.

    Скажем, в одной и той же операционной системе может работать несколько серверов MySQL - как одной и той же, так и разных версий. Только, чтобы не пересекаться по используемым ресурсам, они будут использовать разные номера портов и/или разные каналы. Вот эти серверы и есть Instances. Соответственно при подключении указываем нужный порт, и подключаемся к нужному в данный момент Instance. Обычно же в одной ОС работает только один сервер - тогда он является единственным Instance.

    PS. Операционка, в которой все они одновременно работают, тоже может быть Instance, но только уже OS instance, если она - одна из нескольких виртуализованных операционных систем, одновременно работающих на одном хосте в рамках одного VMM.

    как это настроить?

    Настройка MySQL-сервера на то, какие каналы (IP, named pipe, shared memory), а для IP - с какими настройками (номер порта), выполняется через конфигурационные файлы сервера. Где они, какие имеют имена, какие параметры следует устанавливать и прочее - читай в Reference Manual.
    Ответ написан
    Комментировать
  • Как продолжить цепь запросов в php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если отбросить всю не относящуюся к вопросу чепуху, типа каких-то "внутренних запросов"(?!), то ответ сводится цепочке вызовов.
    Ответ написан
    Комментировать
  • Как вставить данные в запрос?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    public $query - это неправильно с десятка разных точек зрения, от архитектуры до простой житейской логики.
    Но при этом, если бы данные в запрос передавались правильно, а не как как обычно, то чисто технически это бы сработало

    В любом случае, public $query убрать, вместо этого добавить private $db, и в конструктор, соответственно, такой же параметр
    public function addProduct(){
        $query = 'INSERT INTO products (title, price, description, category, image, active) VALUES (?,?,?,?,?,?)';
        $stmt = $this->db->prepare($query);
        $stmt->bind_param("ssssss", $this->title, $this->price, $this->description, $this->category, $this->image, $this->$active);
        $stmt->execute();
    }
    Ответ написан
  • Как запретить гулять по серверным файлам в браузере?

    karabanov
    @karabanov Куратор тега Ubuntu
    Системный администратор
    Какой web сервер ты используешь?

    Для Apache это директива Options -Indexes
    Для Nginx это директива autoindex off;

    Чтобы вовсе запретить доступ к файлу извне прочитай про Allow и Deny.
    Ответ написан
    2 комментария
  • Как подставить алиас в sql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Приоритет запятой ниже приоритета JOIN. Поэтому запрос по факту такой:
    FROM adverts as a, 
         category as c, 
         ( category_advert as ca 
           LEFT JOIN advert_imgs as ai ON ai.main = 1 and ai.id_adv = a.id )

    Очевидно, что внутри скобок никакого a.id нет.

    Забудьте про возможность использовать запятую во FROM. Навсегда. Используйте вместо неё CROSS JOIN.
    Ответ написан
    6 комментариев
  • Стоит ли json'ить все и всегда при получении/отправки запроса?

    @Kirill-Gorelov
    С ума с IT
    Нет, не обязательно.
    Зависит от контекста задачи. Я думаю, что и тебе в этом скрытого смысла нету. Делай как удобно.
    Ответ написан
    Комментировать
  • Как вытащить данные из stmt?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    вместо store_result(); надо писать get_result();
    этот метод даст вам привычный ресурс, из которого уже можно получить данные обычным способом
    $stmt = $link->prepare("SELECT * FROM users WHERE id=?");
    $stmt->bind_param('i', $value);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    Ответ написан
    5 комментариев
  • Что изменить в базе данных?

    @ComodoHacker
    Ошибка первая — не понятно, какую задачу она должна решать. "Получить зачет"?
    Ответ написан
    Комментировать
  • В чем идея и как работают шаблоны?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос очень хороший.
    А ответ на него очень простой.

    Шаблоны нужны для отделения логики приложения от логики отображения.
    Разделив их, мы получим сразу кучу выгод:
    • Нормальную структуру приложения, когда вывод начинается только после того, как отработала вся логика. То есть у нас никогда не будет проблем с ошибкой headers already sent, с возвратом json-а вместо html, с выводом в page header-е тех данных, которые появляются только в процессе работы скрипта
    • Мобильность - один и тот же движок можно будет использовать на нескольких сайтах, меняя только шаблоны, но весь код оставляя одинаковым. Что поможет, в частности, вносить обновления в движок и исправлять ошибки на всех сайтах разом.
    • Разделение труда - сейчас обычно над отображением работают фронтендеры, то есть, когда бизнес-логика отделена от шаблонов, то любой фронт сможет с ней работать


    Соответственно, главное, что надо знать про шаблоны - это то, что любой вывод в РНР скрипте начинается только после того, как отработала вся бизнес-логика.
    Также важно понимать, что в самом по себе смешивании "кода и разметки" ничего ужасного нет. В шаблоне всегда будет код. Без него невозможно выводить динамический контент. Важно только - какой это код, к чему он относится? Код в шаблоне должен относиться только к самому шаблону. На первых порах новичку сложно это отличить. И это еще один плюс специализированных шаблонизаторов.

    После этого есть варианты, которые отличаются в основном удобством работы с кодом шаблона.
    Править HTML код записанный в виде РНР строки - это САМЫЙ неудобный .

    Дальше идут всякие наколенные решения, типа
    бизнес-логика
    include header
    ?>
    хтмл конкретной страницы
    <?php include footer ?>

    или чуть более продвинутый, когда шаблоны хранятся отдельно и могут вкладывться друг в друга. Сначала пишем функцию,
    function render_template($filename, array $data = [])
    {
        ob_start();
        extract($data);
        require __DIR__ . '/' . $filename;
        return ob_get_clean();
    }

    а потом в коде страницы пишем
    бизнес-логика
    ...
    $page_html = render_template('page.tpl.php', [
        'data' => $data,
    ]);
    echo render_template('main.tpl.php', [
        'navigaton' => $nav_list,
        'title' => $title,
        'page' => $page_html,
    ];

    где сами шаблоны это
    ...
            <?php foreach ($navigation as $item): ?>
                <li>
                    <a href="<?= e($item['href']); ?>"><?= e($item['title']); ?></a>
                </li>
            <?php endforeach ?>
    Важно! Любой вывод в этих шаблонах должен экранироваться в обязательном порядке (кроме очевидных случаев, когда мы выводим результат рендера).

    Ну и наконец нормальные шаблонизаторы, из которых я горячо рекомендую Twig.
    Главное, что про него надо знать - даже самые зелёные нубы осваивают его без затруднений. И настоятельно рекомендую сразу перейти на него, после того как наиграетесь с решениями на коленке.
    Ответ написан
    9 комментариев