Задать вопрос
Ответы пользователя по тегу MySQL
  • Как подключиться Бд Битртрикс 24 через СУБД Mysql?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Есть задача подключится к БД Битрикс 24 через СУБД Mysql?


    Настоятельно рекомендую 10 раз подумать прежде чем работать с БД Битрикса через внешнее подключение.
    1. Это не безопасно. Если мы говорим про Bitrix Env то по-умолчанию подклчюение разрешено только с того же сервера.
    Таким образом для того чтобы попасть в БД злоумышленику потребуется сначала получить доступ к серверу.

    2. Битрикс24 не публикует структуру таблиц и связи, так что без опыта не получиться разобраться в хитросплетениях таблиц, т.к. внешних связей он не использует.

    Однако, если вы все же хотите это сделать то вам потребуется:

    1. Сконфигурировать MySQL на прослушивани внешнего порта.
    Почитайте про bind-address настройку.

    2. Создать пользователя с возможностью внешнего доступа к СУБД
    Например через SQL команды:
    GRANT ALL PRIVILEGES ON *.* TO '<user_name>'@'%' IDENTIFIED BY '<password>' WITH GRANT OPTION;
    FLUSH PRIVILEGES;


    где - имя пользователя, а - пароль.
    Рекомендую озаботиться безопасностью и почитать про % в имени пользователя, ограничить доступ конкретной БД и выдать ограничения на операции.
    Подробнее об этом можете узнать в документации к MySQL.

    3. Открыть в iptables или firewalld порты которые будет слушать Mysql.

    Как видите, для решения вашей задачи здесь нет ничего от Битрикс24 - все настройки на уровне сервера.
    Ответ написан
  • В какой таблице Битрикс.24 хранятся благодарности?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Технически благодарности это не просто записи инфоблока "Доска почета" в типе "Орг.структура", но и пост в ленту.

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

    Что касается таблицы, то это таблица элементов (b_iblock_element), но это не все - часть данных находятся в таблице свойств (b_iblock_element_property).

    В предыдущем сообщении есть указание на `iblock_id = 2`, однако это не совсем верно. Идентификатор этого инфоблока находится в b_option (MODULE_ID: `intranet`, NAME: `iblock_honour`). В реальности там может быть и 2 и 4 и любое другое число.
    Ответ написан
  • Сайт на bitrix раздувает таблицу b_event, как исправить?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В b_event хранятся исходящие email сообщения и отключить ее нельзя.
    Вы можете сделать:
    1) Защитить форму обратной связи
    2) Уменьшить время хранения письма в b_event (настройки главного модуля).

    Для защиты формы обратной связи помимо капчи можно использовать:
    - Методы защиты от CSRF (https://habr.com/ru/post/318748/)
    - Потайные input'ы не заполняемые пользователем (зачастую роботы их заполняют)

    Эти методы защитят вас от большинства видов атак, но в случае целенаправленного спама это не решит проблему.
    Ответ написан
    Комментировать
  • Какую сделать структуру и запросы для каталога?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для начала читаем как можно хранить деревья: https://habr.com/ru/post/153861/

    Я бы сделал по-другому:

    1) Таблица с иерархией категорий tbl_category по методу Nested Sets

    2) Таблица товаров tbl_product
    - id,
    - name,
    - art,
    - price

    3) Таблица связи товара с категорией tbl_product_category
    - product_id
    - category_id
    Ответ написан
    3 комментария
  • Как создать таблицу с 2мя ключами?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Во-первых, не ясно почему в таблице встречаются дубли, да еще и на колонке id.
    Де-факто во всех проектах, что я видел, при наличии этого поля оно уникально (как минимум autoincement).

    Во-вторых, подобный вопрос легко ищется поисковиком. Например тут.
    Если хотите узнать больше, гуглите "Составной первичный ключ mysql"
    Ответ написан
  • Что за ошибка mysqil?

    gromdron
    @gromdron
    Работаю с Bitrix24
    "(NULL, '$cart_id_product', '123', '44', '$cart_ip'


    А скобку кто закроет?
    Ответ написан
  • Как вывести из БД картинки?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Добавляя к ответу Егор Скороходов, если уж очень не хочется работать с ManyToMany-моделями, есть более простой способ (как заплатка подойдет, но в перспективе будет хуже).
    В SQL есть такая штука - FIND_IN_SET и можете воспользоваться ею.
    Ответ написан
    Комментировать
  • Почему падает MySQL во время установки Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Все верно - это не ошибка Битрикса, а ошибка сервера.

    Получить "ERROR 1030 (HY000) at line 18723: Got error 168 from storage engine", можно несколькими способами.
    Наиболее распространенные:
    1) Нехватает места на хостинге (Хостинг жадный и дал Вам всего 2ГБ на Битрикс, а рекомендуется для чистой установки не меньше 10ГБ)
    2) Вы уперлись в количество одновременно открытых файлов.

    В любом случае, точную ошибку может дать только log СУБД.
    Ответ написан
    4 комментария
  • Как надежно выполнить несколько запросов mysql (mysqli)?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Ответ - нет. Функция mysqli_multi_query выполнит все запросы так, как если бы Вы использовали обычное query.
    К тому же, она вернет FALSE, только если ПЕРВОЕ выражение вызвало ошибку.

    Для реализации обхода, как Вам уже указали используйте Транзакции через begin_transaction
    Ответ написан
    Комментировать
  • Как сортировать по дату?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Код в читаемом виде
    $sql = "SELECT
    			p.product_id,
    			(
    				SELECT AVG(rating) AS total 
    				FROM " . DB_PREFIX . "review r1 
    				WHERE r1.product_id = p.product_id AND r1.status = '1' 
    				GROUP BY r1.product_id
    			) AS rating,
    			(
    				SELECT price 
    				FROM " . DB_PREFIX . "product_discount pd2 
    				WHERE 
    					pd2.product_id = p.product_id 
    					AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' 
    					AND pd2.quantity = '1' 
    					AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) 
    				ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1
    			) AS discount,
    			(
    				SELECT price 
    				FROM " . DB_PREFIX . "product_special ps 
    				WHERE 
    					ps.product_id = p.product_id 
    					AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' 
    					AND (
    						(ps.date_start = '0000-00-00' OR ps.date_start < NOW()) 
    						AND 
    						(ps.date_end = '0000-00-00' OR ps.date_end > NOW())
    					)
    				ORDER BY ps.priority ASC, ps.price ASC LIMIT 1
    			) AS special";


    И встает вопрос: а что такое дата продукта?
    Предположим, у вас в таблице p (или как она у вас, главное что p - таблица или alias), есть поле "created_at", которая и хранит ту самую "дату продукта"
    Тогда после запроса можно добавить:

    ORDER BY p.created_at DESC

    И тогда он будет выдавать те же данные, но сортированные по убыванию "даты продукта"
    Ответ написан
    Комментировать
  • Как сделать безопасный запрос к БД?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Смотря что именно Вы хотите сделать.
    Если Вас интересует как правильно это делать, то смотрите сообщение от Ильдар Гизетдинов, там подробно описано
    Если Вас интересует как исправить Ваш запрос, то перед вставкой значений в запрос, нужно использовать метод ForSql()
    Ответ написан
    Комментировать
  • Поиск по таблице, как сделать?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А как насчет сделать таблицу search_entity в которую положить:
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `sale_id` int(11) NOT NULL,
    `text` text,

    Причем FULLTEXT KEY `text` (`text`)

    И делать запись 1к1 в данное поле.
    Причем text - это все поля через пробел, можно без знаков препинания, союзов и т.п.
    Тогда поиск будет по отдельной таблице, можно сделать собственное ранжирование (например добавить ключ sort) и выделять нужные поля.
    Ответ написан
    Комментировать
  • Не работает скрипт добавления данных формы в БД, где ошибка?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Замените:
    $query = INSERT INTO registered_users(first_name, last_name, Email)
      VALUES('$firstname'.'$lastname'.'mail');


    На:

    $query = "INSERT INTO registered_users(first_name, last_name, Email) VALUES ('$firstname', '$lastname', '$mail')";


    И посмотрите в чем отличия
    Ответ написан
    Комментировать
  • Проблемы с ЧПУ на php?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Во-первых, mysql тут совершенно не причем - Вам нужно почитать про mod_rewrite

    Во-вторых, есть множество статей в интернете.
    Например: crazy-russian.ru/development/kak-sdelat-chpu-s-pom... или www.chuvyr.ru/2014/02/create-friendly-url-htaccess...

    Что, что вам нужно, называется: ЧПУ или SEF
    Ответ написан
  • Возможно ли создать колонку внутри которой только одна ячейка имеет права содержать в себе значение?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Думаю нет, хотя может быть какими-то внутренними механизмами это можно обойти, но зачем?

    Навскидку есть пара способов:
    1) Транзация на запись: стартует транзакцию -> проверяем, если в колонке нет значения -> записываем -> проверяем что она одна -> коммит/откат
    2) Блокировать таблицу после внесения изменения
    Ответ написан
    Комментировать
  • Как избавиться от ошибки "Mysql server has gone away" в битриксе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Добрый день,

    Обе проделанные настройки не принесут результата.
    Я бы посоветовал произвести следующие настройки:

    1) Обновить модули обмена для 1С и Битрикса
    2) Проводить выгрузку во время наименьшей нагрузки на сайт

    Какие характеристики у сервера?
    Сколько товаров/торговых предложений выгружаете?
    Выгружаете картинки?
    Версия СУБД?
    Версия php?
    Ответ написан
  • MySql Tree comments + limit?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Я бы на Вашем месте попробовал бы Nested sets - www.getinfo.ru/article610.html
    Читается очень легко (можно как ветку достать, так и дерево сразу).

    Однако при добавлении записи придется пересчитывать все left/right
    Ответ написан
    Комментировать
  • Как хранить текст рефератов в БД?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Я бы предложил следующее решение: в таблице мы храним мета-данные, текст реферата и путь к файлу, где лежит реферат. Парсить docx, doc, odt и др. документы можно консольными утилитами.
    Почему? Все просто - в реферате могут быть картинки, диаграммы, формулы и др.

    Если вы будете хранить все в БД, то либо Вам нужно будет от этого отказаться (и хранить только текст без оформления), либо blob'ами
    Ответ написан
    Комментировать
  • Импорт базы в OpenServer?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В OpenServer есть утилита - HeidiSQL. Большие файлы все же лучше через импорт прогонять.
    Ответ написан
  • Как победить медленный SQL запрос с множественными JOIN?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Во-первых, за count(*) as total по рукам, считайте хотя бы ID.
    И я бы уже в коде (я так понимаю это интернет-магазин) разработал бы аналог "фасетногоый поиск". Я так понимаю в вложенном (большом) запросе вы делаете поиск товара по аттрибутам.

    И на конец - попробуйте без INNER JOIN - на матричном умножении и уже сами в WHERE проконтролируйте (иногда это быстрее чем JOIN)
    Ответ написан