SQL:
Настройка phpMyAdmin - blowfish_secret
Если, после установки phpMyAdmin, видите сообщение "В конфигурационном файле необходимо задать парольную фразу (blowfish_secret)."
То стоит еще немного его настроить.
При сохранении данных в БД получил ошибку Invalid datetime format: 1366 Incorrect string value, первоначально подул, что проблема с ORM библиотекой, но замена на RedBeanPHP ничего не дала, ошибка появлялась при попытке сохранить в базу HTML страницу.
Учитывая, что объемы текста были довольно большими, то понять, что именно вызывает ошибку было проблематично.
Решение оказалось довольно простым, данные, до сохранения в БД нужно было прогнать через php функцию utf8_encode.
Joomla: MySql #1025 - Ошибка при переименовании (ошибка: 168 "Unknown (generic) error from engine")
При попытке обновить Joomla до 3.10.1 получил предупреждение, что сначала нужно поправить структур БД.
При попытке ее исправить получил ошибку: got error 168 unknown generic error from engine from storage engine
Аналог implode в mysql
Во многих языках программирования есть функция implode, позволяющая преобразовать массив в стоку с разделителем.
В SQL, и в частности в MySql , есть аналогичная возможность:
SELECT GROUP_CONCAT(`id`) AS id_list FROM `products` WHERE 1
Но стоит учесть, что длинна результирующей строки, в MySql, ограничена 1024 символами.
При этом, при если результат буде т длиннее, то ошибки не будет, а строка просто будет обрезана.
Поэтому, стоит сначала изменить максимальную длину:
SET SESSION group_concat_max_len = 1000000;
Иногда нужно физически объединить (скопировать) данные из нескольких таблиц. Это можно сделать так:
INSERT INTO `tbl_items_all` SELECT * FROM `tbl_items1`;
Но есть проблема - если таблиц несколько, то уникальные поля, обычно это ID, начнут конфликтовать.
Иногда нужно объяснить результат запроса в одну строку, по аналогии с
php
функцией implode (объединяющей элементы массива в строку с заданным разделителем)SELECT GROUP_CONCAT(`internal_id` SEPARATOR ',') FROM `tbl_items` WHERE `id_provider` = 2 AND `internal_id` > 0
SQL запрос позволяющий вывеси категории у которых количество статей превышает определенное.
Подобное может потребоватся, если нужно найти категории в блоге с сытым большим количеством статей.
SELECT * FROM blog_category AS a WHERE ( SELECT count(*) FROM blog_rel_categories2item AS b WHERE b.id_cat = a.id ) > 100
MySQL регулярные выражения
mySql поддерживает регулярные выражения и в этой заметке приведу несколько примеров.
Бывает нужно скопировать данные из одного поля первый таблицы в соответствующие поле второй таблицы используя SQL запрос.