Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 584

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 584

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 584

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 584

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 603

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 702

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 702

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 702

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 702

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el($output) in /home/mchedlishvili.com/mike/WWW/wp-includes/classes.php on line 727

Strict Standards: Redefining already defined constructor for class wpdb in /home/mchedlishvili.com/mike/WWW/wp-includes/wp-db.php on line 58

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-includes/cache.php on line 99

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /home/mchedlishvili.com/mike/WWW/wp-includes/cache.php on line 404

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-includes/theme.php on line 576

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/exec-php.php on line 22

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/manager.php on line 34

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/manager.php on line 35

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/manager.php on line 36

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/admin.php on line 42

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/admin.php on line 48

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/admin.php on line 49

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/admin.php on line 50

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/ajax.php on line 61

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/cache.php on line 33

Deprecated: Assigning the return value of new by reference is deprecated in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/exec-php/includes/cache.php on line 42

Strict Standards: Redefining already defined constructor for class ngg_Tags in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/lib/nggallery.lib.php on line 559
MySQL | Миша.Мчедлишвили


Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

SELECT SUBSTRING_INDEX(email, '@', -1) AS Domain, count(*) AS Total
FROM `emails_table`
GROUP BY Domain
ORDER BY Total DESC
LIMIT 40



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

В повседневной работе приходится сталкиваться с довольно однотипными ошибками при написании запросов.В этой статье хотелось бы привести примеры того, как НЕ надо писать запросы.

Продолжение »



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

Есть вроде бы обычные задачи, которые можно решить сразу и не задумываясь, но при интенсивном использовании таких решений возникают проблемы, причем не маленькие. Об одной из таких задач я и хочу рассказать.

Проблема

Взяли тут аутсорсера написать небольшой и несложный код на PHP и MySQL. Была одна из задач — выбрать несколько произвольных записей из таблицы в базе MySQL. И что же сделал этот ленивый и глупый аутсорсер? Конечно же написал бред типа такого:

SELECT * FROM tTable ORDER BY RAND() LIMIT 10;

На первый взгляд все логично да и работает правильно. Выбираются 10 произвольных записей. Но если взглянуть на план выполнения этого запроса, то станет понятно почему я сложил дюжину матершинных ругательств в адрес глупого аутсорсера.

В процессе выполнения этого запроса MySQL записывает во временную таблицу все (!!!) строки исходной таблицы, с одним новым полем, в которое записываются результаты функции RAND () — т.е. набор произвольных значений. Затем эта временная таблица сортируется filesort по добавленному полю с произвольными значениями и далее выбираются первые 10 записей. Полный ппц. А теперь представтье что будет если в исходной таблице 10 000 записей. А что если 1 000 000? А что если эту выборку надо делать раз десять в секунду. Да тут любой супер-пупер сервер надолго уйдет в раздумья.

Продолжение »



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

Для помещеня бинарного файла в базу данных, надо…

1. создайте таблицу с полем BLOB

2. прочитайте данные, которые надо поместить в базу данных, в переменную $upload. Если это файл (картинка) на диске, то сделайте это так:

Продолжение »



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

Например, почему не работает такой запрос:

SELECT * FROM tableName WHERE charFieldName LIKE "%\\%"

- выбрать из таблицы tableName ряды в которых поле charFieldName содержит обратный слэш (\). При этом сам обратный слэш в запросе экранирован.

Ответ: Потому что запрос неправильно записан.

Правильный запрос выглядит так:

SELECT * FROM tableName WHERE charFieldName LIKE "%\\\\%"

Чтобы выполнить поиск символа ‘\’, его следует указать как ‘\\\\’. При чиной такой записи является то, что обратные слеши удаляются дважды: сначала синтаксическим анализатором, а потом - при выполнении сравнения с шаблоном, таким образом остается только один обратный слеш, который и будет обрабатываться.



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

Для выборки случайного ряда из таблицы можно воспользоваться запросом:

SELECT * FROM table ORDER BY RAND() LIMIT 1;

Однако для лучшей производительности при большом количестве рядов и наличии первичного индекса по полю id который идет БЕЗ ПРОПУСКОВ, в целях оптимизации производительности лучше воспользоваться двумя выборками с генерацией случайного числа на стороне PHP скрипта:

$result = mysql_query(’SELECT MAX(id) FROM table’);
$max_id = mysql_result($result, 0);

$random_id = mt_rand(1, $max_id);

$row = mysql_query(’SELECT * FROM table WHERE id = ‘.$random_id);

Хочу отметить, что таблиц без удаленных рядов, а значит с наличием id без пропусков не так и много, поэтому данный пример не претендует на панацею.



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

Бывают ситуации когда возникает необходимость обновить ряд с указанным ID, либо при отсутствии этого ID, вставить соответствующую ему запись. Таким образом нужно проверить есть ли в таблице запись с нужным ID через SELECT, если есть то выполнить UPDATE, иначе вставить ряд с помощью INSERT. Но есть более оптимальный путь, это использование в запросе вставки ON DUPLICATE KEY UPDATE.

INSERT INTO table SET column = 1, id=101 ON DUPLICATE KEY UPDATE column = column + 1

Что делает приведенный запрос? Запрос говорит следующее: вставить новый ряд, НО если ряд с указанным ID уже существует, то просто обновить в нем поле column. Следует учесть, что ID должен быть первичным или уникальным ключом!

Mysql-юмор



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

- Как проверить, есть ли таблица в БД?
- if (mysql_query(”DROP TABLE`таблица`”)) {echo “Таблица была… =)”;}



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

Источник: http://topright.livejournal.com/

  1. Боритесь с рутиной! Инкапсулируйте её (в ж…),
    абстрагируйтесь от неё (на х…). Пишите всё единожды, локализуйте
    решение повседневных задач. Настоящие сенсеи выше двух низменных
    вещей: суеты желаний и размножения методом copy-paste.

  2. В начале проектирования перечислите и назовите все сущности
    предметной области (в нашем случае это site, page, module, user,
    language, session, cookie и т.д.). Не обязательно все эти сущности
    отразятся в архитектуре вашей системы в виде классов или файлов. Но
    в вашем распоряжении окажется богатая лексика предметной области,
    что поможет раскованному проектированию системы. По мере локализации
    решения стандартных задач (см. предыдущий совет), раскидывайте эти
    решения по наиболее подходящим сущностям (классам или файлам).
    Пускай ваши сущности постепенно обрастают мясом, методами,
    способностями. Чем не RPG?


    Продолжение »



Strict Standards: Non-static method nggallery::get_option() should not be called statically in /home/mchedlishvili.com/mike/WWW/wp-content/plugins/nextgen-gallery/nggfunctions.php on line 10

Источник: http://www.weblibrary.biz

Средство полнотекстового поиска MySQL пока имеет только несколько настраиваемых пользователем параметров, несмотря на то, что задача добавления новых обладает высоким приоритетом в планах того, что должно быть нами сделано. Вы можете получить больший контроль над поведением полнотекстового поиска, если у вас есть исходный дистрибутив MySQL, потому что некоторые изменения требуют модификации исходного кода.

Отметим, что полнотекстовый поиск был тщательно настроен для обеспечения наилучшей эффективности. Модификация поведения по умолчанию может в большинстве случаев только ухудшить результат. Не изменяйте исходных текстов MySQL, если только вы точно не знаете, что делаете!


Продолжение »