VirtueMart – интернет-магазин на Joomla. Часть 28. Быстрая обработка и изменение данных с помощью SQL-запросов

( 5 голосов ) 

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.Думаю, что многие владельцы интернет-магазинов, сделанных на Virtuemart, часто сталкивались с рутинными задачами, отнимающими просто огромное количество времени. Например, обновление цен, смена категории, валюты, производителя большого количество товаров и.т.п. Беда Virtuemart в том, что такие действия довольно часто нельзя выполнить сразу над набором товаров – редактировать приходится каждый отдельно. В этой статье я расскажу о том, как быстро получить уйму полезной информации, а также совершить некоторые действия над товарами напрямую через базу данных.


Начнем с того, что многое из описанного в этой статье, можно сделать с помощью компонента CSV Imprived, но есть несколько НО:

– CSV Improved платный;

– он требует даже большего изучения и подготовки, чем способ, описанный мной здесь;

– он требует использования Excel-таблиц или аналогов.

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

Изначально CSV Imprived создан для экспорта/импорта товаров Virtuemart и с этим он отлично справляется, но перед нами сегодня стоит немного другая задачка, которую мы постараемся решить другими средствами.

Предупреждение(!)

(!) Прежде чем выполнять действия, описанные ниже, обязательно создайте резервную копию базы данных!

(!) Не проводите эксперименты на действующих проектах!

(!) Выполняйте запросы на действующих проектах только имея резервную копию базы данных и точно понимая, что вы делаете!

PhpMyAdmin – веб-интерфейс администрирования базы данных.

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

Итак, несколько фактов о Virtuemart:

– база данных Virtuemart представляет собой набор таблиц, в которых хранятся данные о товарах, производителях, заказах, а также обо всем остальном, что изменяется в магазине с течением времени;

– база данных Virtuemart является составной частью базы данных Joomla. Это означает, что при установке Virtuemart добавляет свои таблицы к таблицам Joomla.

– база данных Virtuemart имеет префикс vm_. О том, что это рассказывается ниже.

Для просмотра таблиц базы данных и управления ими нужен веб-интерфейс (все это, конечно, можно делать путем программирования, но для людей, малознакомых с ним, такая задачка окажется крайне сложной). Таким интерфейсом является PhpMyAdmin.

Что представляет из себя PhpMyAdmin? Это такой же скрипт, как и Joomla, т.е. набор php-файлов, позволяющий легко и удобно управлять базой данных.

Где найти и как запустить PhpMyAdmin? PhpMyAdmin есть на любом php-хостинге. Сегодня это стандарт. Найти его вы сможете в панели управления хостингом в разделе управления базами данных. Если вы работаете на Dender’е(локальном веб-сервере), то PhpMyAdmin доступен по адресу: http://localhost/Tools/phpmyadmin/ . Denwer при этом, естественно, должен быть запущен.

В зависимости от используемой версии внешний вид интерфейса PhpMyAdmin может немного меняться. Ниже на рисунках мы будем рассматривать версию 3.2.3, которая встроена в Denwer.

Вот главное окно PhpMyAdmin:

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

Слева мы видим доступный список баз данных. Если кликнуть по одной из баз, то откроется страница со следующим содержимым:

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

Теперь мы видим слева и справа список таблиц текущей базы данных. Кликнув по одной из таблиц слева, мы увидим следующее:

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

Здесь нас интересуют три вкладки, показанные вверху окна:

1) Browse:

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

На вкладке Browse можно увидеть часть содержимого таблицы. По умолчанию показывается 30 строк. Сверху можно увидеть названия колонок(полей) таблицы.

2) Structure:

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

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

3) SQL:

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

Вкладка SQL содержит форму ввода SQL-запроса к базе данных.

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

Создание резервной копии базы данных.

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

Резервная копия делается легко и быстро:

1) Кликаем слева по базе, которую хотим сохранить:

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

2) На вкладках справа жмем ссылку Export

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

3) В открывшемся окне выделяем все таблицы(если они не выделены), ставим галочку Save as file и жмем кнопку Go.

Быстрая обработка и изменение данных Virtuemart с помощью SQL-запросов.

После этого браузер выдаст запрос на сохранение файла, содержащего базу данных.

Просто, не правда ли?

Аналогичным способом происходит и восстановление резервной копии базы. Жмем ссылку Import, выбираем файл, жмем кнопку Go.

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

Работа с SQL-запросами.

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

Прежде всего нам нужно научиться выбирать данные. Я уже писал об этом. Приведу цитату из одной моей статьи:

---------------------------------------------

Итак, наша цель – выбрать из базы данных определенные данные. Для того, чтобы сделать это, нужно ответить на 3 основных вопроса:

1) Что выбирать? (SELECT)

2) Из чего выбирать? (FROM)

3) Как выбирать? (WHERE)

В скобочках я написал основные операторы SQL, ответственные за каждый из вопросов.

Теперь подробнее.

1) Как известно, база данных Joomla – это набор таблиц. У каждой таблицы есть столбцы и строки, при этом в столбцах указывается переменная, а в строках – ее значения.

Вот пример:

Таблица: birthday

ФИО

Год рождения

Иванов Иван Иванович

1977

Петров Петр Петрович

1988

Сидоров Сидр Сидорович

1999

Чтобы выбрать конкретную запись, нам нужно выбрать правильный столбик и задать условие выбора строки. Т.е., например, сказать: «Выбери ФИО того человека, который родился в 1988 году».

В SQL за «выбери» отвечает SELECT, а за «который родился» – WHERE. Кроме того, т.к. в Joomla таблица не одна, а много, нам нужно указать в запросе название таблицы( за это отвечает оператор FROM).

Таким образом, наш SQL-запрос будет иметь следующий вид:

1
SELECT ФИО FROM birthday WHERE Год рождения = '1988'

Результатом выполнения этого запроса будет «Петров Петр Петрович»

---------------------------------------------

Если требуется не просто выбрать данные, а еще и совершить над ними какие-то действия, можно использовать оператор UPDATE. Вообще, по языку SQL в Интернете очень много учебников и руководств. Не думаю, что его изучение в контексте данной статьи, хорошая идея. Здесь мы говорим про Virtuemart и пора бы уже поговорить непосредственно о нем.

Как я упоминал выше, все таблицы, относящиеся к Virtuemart, имеют префикс vm_. Префикс таблиц Virtuemart идет после префикса таблиц Joomla и если префикс таблиц Joomla стандартный, то перед названием таблицы Virtuemart вы будете видеть следующее:

jos_vm_. Что-то я увлекся умным словом «префикс» и совсем забыл напомнить для чего он, собственно, нужен. Расширения для Joomla разрабатывают программисты всего мира. Многие из этих расширений имеют свои таблицы базы данных, которые при установке добавляются к таблицам Joomla. Если бы не префикс, то наверняка нашлись бы разработчики, назвавшие таблицы своих баз одинаково. При установке двух таких расширений, естественно, ничего хорошего бы не получилось. Для того, чтобы не было таких «накладок», используется префикс базы данных и расширений. Вероятность совпадения  названий таблиц префикс не исключает(ведь в мире могут найтись разработчики, которые назовут одинаково не только таблицы, но и префиксы), но значительно ее уменьшает.

Зная префикс Virtuemart, вы легко сможете увидеть в базе данных все таблицы, которые к нему относятся. Именно с ними нам и предстоит работать. Названия таблиц, а также столбцов в таблицах созданы так, чтобы каждый, прочитав их, смог догадаться какие данные в них содержаться. Например очевидно, что таблица jos_vm_product содержит данные о товарах магазина. А столбец product_name этой таблицы содержит названия товаров. Немного знаний английского языка и вы легко сможете ориентироваться в таблицах. Если же с английским совсем плохо, то просто посмотрите обзор таблиц. По данным, содержащимся в ячейках, обычно легко понять, что храниться в таблице/столбце таблицы.

Примеры некоторых SQL-запросов.

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

Примечание

Префикс таблиц Joomla может быть не только jos_. Если префикс таблиц Joomla в вашей базе данных отличается от стандартного, то чтобы правильно выполнить запрос нужно изменить в нем префикс jos_ на тот, который используется у вас.

Теперь непосредственно запросы:

1. Массовое обновление данных о товарах

Иногда требуется изменить какое-то постоянное значение, которое имеется у всех товаров. Например, очень частая проблема – неверное указание единицы измерения веса товара. Как известно, способы доставки работают только если единица веса задана, как kg, но не кг. Если вы узнаете об этом уже после того, как наполнили магазин тысячей товаров, то открывать каждый из них и вручную исправлять вес совсем не хочется. В этом случае поможет заклинание запрос:

1
2
UPDATE `jos_vm_product`
SET `product_weight_uom`='kg'

После выполнения запроса вы можете увидеть, что все значения колонки product_weight_uom таблицы jos_vm_product  стали равны kg.

Аналогичным образом можно задать единицы измерения длины, ширины, высоты товара, и другие однотипные данные.

2. Обновление цен

Еще одна частая задачка. Предположим, что необходимо увеличить все цены товара на определенный коэффициент, например, в соответствии с инфляцией. Предположим, что нужно поднять цены на 10%. Используем следующий запрос:

1 
2 
UPDATE `jos_vm_product_price` 

SET `product_price`= `product_price`*1.1

После выполнения этого запроса все цены увеличатся на 10%.

3. Смена категории

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

– из какой категории переносить товары;

– в какую категорию переносить товары.

Каждая категория в Virtuemart имеет уникальный идентификатор(id). Каждый товар Virtuemart также имеет идентификатор. Каждый идентификатор товара связан с идентификатором категории, в которой этот товар находится.

Предположим, что нам нужно перенести все товары из категории с id=9 в категорию с id=12. Узнать ID соответствующей категории можно в админке Virtuemart. В списке категорий, в последней колонке указан как раз этот ID. Запрос будет следующий:

1
2
3
UPDATE `jos_vm_product_category_xref`
SET `category_id`= '12'
WHERE
`category_id`='9'

Здесь мы не только выбрали колонку для обновления, но также взяли из нее только те значения, которые равны 9.

4. Скидка определенной категории товаров

Иногда нужно сделать скидку на товары определенной категории. Чтобы не назначать скидку для каждого товара категории отдельно, мы используем SQL-запрос. Для его создания нужно посмотреть каким образом в Virtuemart хранятся скидки. Для скидок в базе данных существует отдельная таблица jos_vm_product_discount. Также каждой скидке при создании присваивается уникальный идентификатор(id). Алгоритм наших действий следующий:

1) Переходим в Virtuemart –> Товары –> Список скидок на товары.

2) Создаем нужную нам скидку.

3) Открывает таблицу jos_vm_product_discount, находим в ней нашу скидку и запоминаем ее id(пусть это будет 1).

4) Находим категорию товаров, в которой будет применяться скидка, в списке категорий и запоминаем ее id(пусть это будет 9).

5) Выполняем следующий SQL-запрос:

1
2
3
UPDATE `jos_vm_product`
SET `product_discount_id`= '1'
WHERE `product_id` IN (SELECT `product_id` FROM `jos_vm_product_category_xref` WHERE `category_id` = '9')

После выполнения этого запроса всем товарам категории c id=9 будет задана скидка с id=1.

5. Изменить валюту для всех товаров

Если требуется изменить валюту сразу для всех товаров магазина на рубли, выполняем запрос:

1
2
UPDATE `jos_vm_product_price`
SET `product_currency`= 'RUB'

6. Изменить шаблон страницы категории.

Если у вас сотня категорий и вам требуется изменить у каждой из них шаблон browse_1 на, например, browse_2, то вручную вам придется открывать каждую из категорий и делать это. SQL-запрос же сделает это за доли секунд:

1
2
UPDATE `jos_vm_category`
SET ` category_browsepage`= 'browse_2'

7. Изменить шаблон flypage категории

Случай аналогичен предыдущему, только требуется изменить шаблон страницы товара flypage.tpl на flypage_images.tpl:

1
2
UPDATE `jos_vm_category`
SET ` category_flypage`= ' flypage_images.tpl'

На этом остановлюсь. Понимая язык SQL даже на базовом уровне, вы можете делать за минуту работу, которая  при использовании админки заняла бы у вас час.  Если вы написали SQL-запрос для решения еще какой-нибудь задачи, пожалуйста, поделитесь им в комментариях(для вставки запроса используйте тег [CODE][/CODE]).

------------

Вашему вниманию представлено изучение английского по скайпу. Это что-то новенькое. Возможно, такой подход даст хороший результат.

В связи с 6-летием хостинг-компания Inferno Solutions предлагает администрируемый сервер в Германии Core2Quad Q9550 4x2.83 Ghz + 8GB RAM + 2x500GB HDD + 5000Gb bw + 100Mbit - по СУПЕР цене 99$! Помощь в переезде прилагается.

Теги:

Комментарии   

 
0 # обновление из Excel SQLАлексей 06.09.2011 19:37
Виталий, здравствуйте, спасибо, за статью! Вопрос, как по вашему мнению интересно ли было бы пользователям обновлять данные Марта напрямую из Excel выгружать, обновлять, удалять?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: обновление из Excel SQLWedal 07.09.2011 11:10
Алексей, не понял вас. Зачем пользователям обновлять данные? Вы имеете ввиду администраторов?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: обновление из Excel SQLАлексей 07.09.2011 12:11
Виталий, имею ввиду пользователей, которые занимаются массовым обновлением данных в магазине, можно назвать их администраторами! Я для себя сделал программу. Она выгружает данные Марта из SQL прям в Excel. В Excel изменяешь, нарпимер, цены или описания или фото (любую информацию), затем нажимаешь на кнопку и Март обновляется. Очень удобно, быстро и легко обновлять, добавлять и удалять информацию в магазине. Виталий, ищу партнёра для продвижения этой темы. Программа для обновления есть, нужен профессианольный взляд. Вам интересно?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: RE: обновление из Excel SQLWedal 08.09.2011 01:24
Алексей, а в чем отличие от того же CSV Improved? Только в том, что программа десктопная?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: RE: RE: обновление из Excel SQLАлексей 08.09.2011 06:14
Главное отличие - простота, 2 гнопки выгрузить и загрузить - Минимум времени на обучение и начало работы с ней. Работа с неограниченным количеством магазинов.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: RE: RE: RE: обновление из Excel SQLWedal 09.09.2011 01:36
Алексей, если дадите посмотреть,что-нибудь скажу вам. Так или иначе, свяжитесь со мной через форму обратной связи.
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: RE: RE: RE: RE: обновление из Excel SQLADSL 05.10.2011 10:06
Ох как хочется посмотреть, что же это такое. Алексей, можно ли где-нибудь скачать эту программу?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: RE: RE: RE: RE: RE: обновление из Excel SQLADSL 15.10.2011 04:21
Похоже, программа не удалась?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: RE: обновление из Excel SQLkuzma77744 23.10.2011 12:50
Aлексей,я заинтересовался!Пожалуйста,свяжитесь со мной
Ответить | Ответить с цитатой | Цитировать
 
 
0 # КоментЯрослав 07.11.2011 14:41
Спасибо хорошая статья по запросам, не очень понил 4 запрос но это пара минут дополнительно изучения SQL
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Ошибка импорта файлаКатя 18.01.2012 08:19
Здравстуйте! Подскажите, пожалуйста, в чем причина. При импорте сохр. копии мне выдается такая ошибка: "Ошибка
SQL-запрос:

-- -- Дамп данных таблицы Ошибка


Ответ MySQL:

#1062 - Duplicate entry '1' for key 'PRIMARY' "

В чем причина?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # публикация товаровЕлизавета 20.03.2012 08:47
А вот SQL на публикацию товаров есть?
Чтобы можно было автоматически опубликовать все товары? А то иногда это очень важно
Ответить | Ответить с цитатой | Цитировать
 
 
0 # RE: публикация товаровWedal 21.03.2012 02:03
Елизавета,

UPDATE `jos_vm_product`
SET `product_publish`= 'Y'
Ответить | Ответить с цитатой | Цитировать
 
 
0 # запрос на публикациюЕлизавета 21.03.2012 06:07
:) Замечательно. Спасибо огромное!
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий


Защитный код
Обновить

Объявления

Последние комментарии

Клуб

Подписка

rssicon eMail


Заработок для web-мастера

Sape - продажа ссылок
Liex - размещение статей
Blogun - платные постовые, обзоры (мягкий отбор)
Gogetlinks - платные постовые, обзоры (жесткий отбор)
Rotaban - продажа баннеров
Rotapost - размещение постовых и обзоров

Всем зарегистрировавшимся по данным ссылкам предоставляются бесплатные консультации по работе с системами.

Поиск по сайту

Последние темы форума

Достижения

Яндекс цитирования в каталоге dmoz Каталог@Mail.ru - каталог ресурсов интернет
В случае перепечатки материалов активная ссылка на Wedal.ru обязательна!
Уроки Joomla © 2009-2012. Все права защищены.
Рейтинг@Mail.ru
Рекламко: