Полезные запросы к Simpla CMS

CMS Simpla пользуется определённой популярностью среди небольших интернет-магазинов. CMS имеет довольно скромные возможности, но при этом есть всё минимально необходимое, чтобы начать продавать сразу после установки. Со временем появляются желания по функционалу, которые можно реализовать только с привлечением программиста. В этой статье я приведу некоторые полезные приёмы, которые может повторить каждый без привлечения программиста, - нужен только доступ к выполнению SQL-запросов. Чаще всего на хостинге есть phpMyAdmin - это идеально подходит. Только выполните резервное копирование перед операциями с базой данных ;-)

Ленивые пользователи

В этом движке интернет-магазина покупателям разрешено делать заказы без регистрации. Для пользователя, чаще всего, это удобно. Заказал и забыл про этот интернет-магазин. Для интернет-магазина тоже казалось бы хорошо: снижается сложность оформления заказа, - большее количество человек дойдёт до оформления заказа. Но вот возвратить такого клиента уже сложнее. На помощь приходит запрос, который покажет всех таких ленивых пользователей, которые на самом деле когда-то регистрировались, но на момент оформления заказа не авторизовались (забыли или не захотели):
SELECT `s_orders`.`id` AS "ORDER_ID", `s_users`.`id` AS "USER_ID", `s_users`.`email` FROM `s_orders`, `s_users` WHERE `s_orders`.`user_id`=0 AND `s_orders`.`email`=`s_users`.`email` ORDER BY `s_users`.`email`;
Можно заказам таких ленивых (или забывчивых) пользователей проставить привязку к пользователям из базы:
UPDATE `s_orders`, `s_users` SET `s_orders`.`user_id`=`s_users`.`id` WHERE `s_orders`.`user_id`=0 AND `s_orders`.`email`=`s_users`.`email`;
После того, как будут созданы все возможные привязки пользователей к заказам, останутся заказы, при оформлении которых пользователи не авторизовались и раньше никогда не регистрировались. Можно самостоятельно сделать регистрацию таким пользователям! Это полезно, когда требуется в какую-то стороннюю систему передавать данные по заказам, а там обязательна привязка к клиентам.
Вот запрос, который создаст ленивым пользователям регистрации со случайными паролями (которые кстати, не дадут авторизоваться, но пользователям с такими email при необходимости можно будет пройти стандартную процедуру восстановления пароля и получить действительный пароль от этой искусственной учётки):
INSERT INTO `s_users` (`email`, `phone`, `password`, `name`, `enabled`)
SELECT `s_orders`.`email`, REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(`s_orders`.`phone`, "+", ""), " ", ""), "-", ""), "(", ""), ")", ""), PASSWORD(RAND()), `s_orders`.`name`, 1
FROM `s_orders` WHERE `s_orders`.`user_id`=0 AND `s_orders`.`phone` IS NOT NULL GROUP BY `s_orders`.`phone`;
Тут данные для учётки черпаются из данных заказа, причём отбираются только заказы, где указаны телефоны. Тут ещё и бонус для внимательных читателей затесался: возможность средствами SQL очистить телефон (т.е. "+7(900)-900-90-90" превратится в "79009009090").

Уникальность телефонов

Иногда требуется реализовать авторизацию на базе телефонов. В этом случае нужно убедиться, что все пользователи базы имеют уникальные телефоны. В этом поможет запрос, который покажет количество повторов каждого из номеров телефонов:
SELECT `phone`, count(`phone`) AS "COUNT_PHONE" FROM `s_users` WHERE `phone` IS NOT NULL GROUP BY `phone` ORDER BY `COUNT_PHONE` DESC;
Всех пользователей с повторами нужно будет как-то вручную обработать.

Многоразовый купон только на одну покупку

В Simpla CMS можно создать многоразовые купоны на скидку. Это удобно, когда можно один купон разослать многим пользователям и потом анализировать успешность акции. Но в этом интернет-магазине (как впрочем и во многих других) слишком широко подразумевается принцип "многоразовости" купона. Почти всегда владельцу интернет-магазина совершенно не хочется наградить покупателей пожизненной скидкой на каждый заказ. Хочется, чтобы каждый клиент смог бы воспользоваться многоразовым купоном не более одного раза. А многоразовость подразумевала бы, что разные пользователи могут воспользоваться одним и тем же купоном.
Добавить собственное флажковое поле купонам можно таким запросом:
ALTER TABLE `s_coupons` ADD `for_first_buy` boolean;
Чтобы это поле задействовать всё же придётся обратиться к программисту (прописать в формах админки и добавить проверку при оформлении заказа). Вот инструкция, как это развернуть.
Перед покупкой можно проверить доступность клиенту купона таким запросом (значение для идентификатора пользователя нужно заменить на требуемое - на идентификатор проверямого пользователя):
SELECT `s_orders`.`id` FROM `s_orders`, `s_coupons` WHERE `s_coupons`.`for_first_buy`=1 AND `s_coupons`.`code`=`s_orders`.`coupon_code` AND `s_orders`.`user_id`="1" AND `s_orders`.`status`<>3;
Тут отбираются только реально успешно завершённые заказы. Ведь нечестно лишать клиента купона если его предыдущий заказ с этим купоном отменили и реально заказа так и не было реализовано. Также тут проверяется самодельный флаг-признак купона "Только для первой покупки".

Клиенты-молчуны

Бывает и такое, что пользователи регистрируются в интернет-магазине, но заказов так и не совершают. Например, что-то выбирают-выбирают, да так и не решаются. Может, стоит не терять таких клиентов и предложить им что-то особенное? Опознать таких молчунов (и дать вам их контакты) может какой запрос:
SELECT `s_users`.`phone`, `s_users`.`name`, `s_users`.`email` FROM `s_users` LEFT JOIN `s_orders` ON `s_orders`.`user_id`=`s_users`.`id` WHERE `s_orders`.`user_id` IS NULL GROUP BY `s_users`.`id`;
Любите своих клиентов, берегите их! И не пренебрегайте мощью SQL!

Комментарии

Популярные сообщения из этого блога

Пропорциональное распределение суммы

Битрикс: своя геолокация

Bitrix24 API - разбор демо приложения третьего типа