В этой статье я расскажу о том, как быстро получить уйму полезной информации, а также совершить некоторые действия над товарами напрямую через базу данных.
VirtueMart – интернет-магазин на Joomla. Часть 28. Быстрая обработка и изменение данных с помощью 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 основных вопроса:

  • Что выбирать? (SELECT)
  • Из чего выбирать? (FROM)
  • Как выбирать? (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$! Помощь в переезде прилагается.

Об авторе
Об авторе
Wedal (Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.

Другие статьи серии

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

Для отправки комментария введите код с картинки:
Защитный код
Обновить

Комментарии  

0 # Алексей 06.09.2011 19:37
Виталий, здравствуйте, спасибо, за статью! Вопрос, как по вашему мнению интересно ли было бы пользователям обновлять данные Марта напрямую из Excel выгружать, обновлять, удалять?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 07.09.2011 11:10
Алексей, не понял вас. Зачем пользователям обновлять данные? Вы имеете ввиду администраторов?
Ответить | Ответить с цитатой | Цитировать
0 # Алексей 07.09.2011 12:11
Виталий, имею ввиду пользователей, которые занимаются массовым обновлением данных в магазине, можно назвать их администраторами! Я для себя сделал программу. Она выгружает данные Марта из SQL прям в Excel. В Excel изменяешь, нарпимер, цены или описания или фото (любую информацию), затем нажимаешь на кнопку и Март обновляется. Очень удобно, быстро и легко обновлять, добавлять и удалять информацию в магазине. Виталий, ищу партнёра для продвижения этой темы. Программа для обновления есть, нужен профессианольный взляд. Вам интересно?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 08.09.2011 01:24
Алексей, а в чем отличие от того же CSV Improved? Только в том, что программа десктопная?
Ответить | Ответить с цитатой | Цитировать
0 # Алексей 08.09.2011 06:14
Главное отличие - простота, 2 гнопки выгрузить и загрузить - Минимум времени на обучение и начало работы с ней. Работа с неограниченным количеством магазинов.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 09.09.2011 01:36
Алексей, если дадите посмотреть,что-нибудь скажу вам. Так или иначе, свяжитесь со мной через форму обратной связи.
Ответить | Ответить с цитатой | Цитировать
0 # ADSL 05.10.2011 10:06
Ох как хочется посмотреть, что же это такое. Алексей, можно ли где-нибудь скачать эту программу?
Ответить | Ответить с цитатой | Цитировать
0 # ADSL 15.10.2011 04:21
Похоже, программа не удалась?
Ответить | Ответить с цитатой | Цитировать
0 # kuzma77744 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 # Wedal 21.03.2012 02:03
Елизавета,

UPDATE `jos_vm_product`
SET `product_publish`= 'Y'
Ответить | Ответить с цитатой | Цитировать
0 # Елизавета 21.03.2012 06:07
:) Замечательно. Спасибо огромное!
Ответить | Ответить с цитатой | Цитировать
+1 # Serega 26.05.2012 20:32
подскажите как составить запрос для изменения цены товаров одного производителя из категории товаров?
Например: имеем товар - холодильники. Производители - Самсунг, Норд, Снайге и т.д.
Нужно изменить цену холодильников производителя Норд не зацепив остальных производителей.
я пробовал составить такой запрос на основе изменения цены категории товара, указывая id категории и id производителя, но не получилось. На форумах тоже не нашел подсказки.
Ответить | Ответить с цитатой | Цитировать
0 # Marina 29.05.2012 11:13
Здравствуйте. Помогите пожалуйста. Возможно ли продублировать изображения категорий, в товарах с помощью запроса?
Ответить | Ответить с цитатой | Цитировать
0 # Marina 29.05.2012 12:50
UPDATE jos_vm_product
SET product_thumb_image =(
SELECT DISTINCT
jos_vm_category.category_thumb_image
FROM
jos_vm_category ,
jos_vm_product_category_xref
WHERE
jos_vm_product_category_xref.category_id = jos_vm_category.category_id
AND jos_vm_product_category_xref.product_id=jos_vm_product.product_id
AND jos_vm_product.product_thumb_image is NULL
)
Ответить | Ответить с цитатой | Цитировать
0 # Sasha 01.06.2012 00:29
А не подскажите как написать sql запрос в VirtueMart что бы во все описание товаров после например слова "прочие" добавить некоторый HTML код?
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 01.06.2012 02:17
Sasha, как по мне, здесь проще сделать экспорт БД, открыть ее продвинутым редактором, сделать поиск с заменой, выполнить импорт базы данных.
Ответить | Ответить с цитатой | Цитировать
0 # Sasha 01.06.2012 02:46
Разобрался. Примерно так:
UPDATE ИМЯ_ТАБЛИЦЫ SET ИМЯ_ПОЛЯ = REPLACE(ИМЯ_ПОЛЯ, "строка для замены", "чем заменяем")
Ответить | Ответить с цитатой | Цитировать
0 # yaro23 26.12.2012 19:03
Поставил английский шаблон с заполеннными демо-данными и всё работает на ура, потом накатил рускую версию джумлы + VM2 рус. В итоге пустая база. Но как только переключаю на английский основной язык - всё опять появляется...

Попробовал заменить все содержимое текста с ru-RU.com_virtuemart.ini скопировал и вставил в en-GB.com_virtuemart.ini - теперь товары и категории на месте!
Но проблема с установленными модулями - их надписи отображаются на сайте очень коряво (как-бы просто англ. название модулей отображает на сайте с нижними черточками,типа "_ _").
Как с помощью SQL-запросов перенести все категории и товары в русскую версию или чтоб они появились при переключении на русский язык??? Спасибо!
Ответить | Ответить с цитатой | Цитировать
0 # Edik 26.04.2013 12:53
Ребя помогите в запросе. У VirtueMart поменять у всех товаров артикул. В артикуле есть как буквы так и цифры. А нужно старые артикулы удалить и добавить новые рендомные начиная от 300 до 5000.. Таблица jos_vm_product а сам артикул product_sku. Помогите ...
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 30.04.2013 02:44
Edik, это нельзя сделать запросом. Артикулы должны быть уникальными, а потому не могу быть случайными(случайные числа могут повторяться). Здесь лучше всего использовать импорт из CSV.
Ответить | Ответить с цитатой | Цитировать
0 # Edik 30.04.2013 05:00
Цитирую Wedal:
Edik, это нельзя сделать запросом. Артикулы должны быть уникальными, а потому не могу быть случайными(случайные числа могут повторяться). Здесь лучше всего использовать импорт из CSV.


Так всетаки придется все вручную вбивать? А не подскажите как это сделать ?
Ответить | Ответить с цитатой | Цитировать
0 # Edik 01.05.2013 17:29
Цитирую Edik:
Цитирую Wedal:
Edik, это нельзя сделать запросом. Артикулы должны быть уникальными, а потому не могу быть случайными(случайные числа могут повторяться). Здесь лучше всего использовать импорт из CSV.


Так всетаки придется все вручную вбивать? А не подскажите как это сделать ?



csv improved + Open оffice всем в помощь
Ответить | Ответить с цитатой | Цитировать
0 # Outja 07.06.2013 09:53
Подскажите, у меня такая проблема.

1) не могу найти выход, как убрать на этой странице "http://www.mebel-interio.com/furniture" надписи: "Joomla Fashion Store

We offer a full range of services from interior design to the build and management projects."

уже все перерыл, но безуспешно.
Ответить | Ответить с цитатой | Цитировать
0 # Edik 07.06.2013 10:10
Тут одно из двух - или поиск в файлах с текстом с помощью Totalcmd или же поиск в базе данных..
Ответить | Ответить с цитатой | Цитировать
0 # Outja 07.06.2013 10:22
Edik, в базе данных колупался.
ща попробую через Ttlcmd
Ответить | Ответить с цитатой | Цитировать
0 # Edik 07.06.2013 10:26
В Totalcmd в первую очереди нужно колупатся..
Ответить | Ответить с цитатой | Цитировать
0 # Outja 07.06.2013 10:26
Вот что написано там при нажатии CTRL+U ::





Joomla Fashion Store
We offer a full range of services from interior design to the build and management projects.
 
Ответить | Ответить с цитатой | Цитировать
0 # Edik 07.06.2013 10:37
В Totalcmd пользуйся поиском Alt + F7
Ответить | Ответить с цитатой | Цитировать
0 # DJ_Alexx 22.06.2013 06:04
Подскажите, как сделать следующее: есть действующий интернет магазин. Понадобилось добавить "сопутствующий товар" сразу к нескольким тысячам товаров на сайте (но не ко всем товарам), делать это вручную нереально, должен же быть какой-то вариант когда можно сделать это для группы товаров. Подскажите пожалуйста, как это сделать?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 12.08.2013 08:29
DJ_Alexx,
1) эти несколько тысяч товаров должны иметь одинаковый сопутствующий товар?
2) эти несколько тысяч товаров объединяет какой-то общий признак(например, общая категория)?
Ответить | Ответить с цитатой | Цитировать
0 # Madforit 06.07.2013 08:00
Подскажите, пожалуйста, относительно примера 3: как из категории с id=9 в категорию с id=12 перенести не все товары, а только имеющие определенный общий атрибут? В моем случае, общие свойства содержатся в полях Product_name, product_scu, custom_value. Можно выбрать по любому из этих атрибутов.
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 12.08.2013 08:30
Madforit, добавить в конце запроса:
WHERE product_scu='общий атрибут'. В этом случае будут затронуты только строки, для которых выполняется это условие
Ответить | Ответить с цитатой | Цитировать
0 # Андрей2014 09.01.2014 08:36
Здравствуйте!

Будьте любезны - помогите с составлением запроса для изменения наличия всех товаров в виртуемарт.
Поле - product_in_stock
Сейчас в наличии - 0. А нужно - 1000.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 10.01.2014 03:18
Андрей, какая таблица БД содержит это поле?
Ответить | Ответить с цитатой | Цитировать
0 # Андрей2014 10.01.2014 11:09
в таблице: virtuemart_products
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 13.01.2014 03:44
Андрей,
Код:UPDATE `virtuemart_products` SET `product_in_stock` = 1000
Ответить | Ответить с цитатой | Цитировать
0 # Андрей2014 13.01.2014 11:26
Спасибо! Все получилось!
Ответить | Ответить с цитатой | Цитировать
0 # АндрейV 09.11.2014 12:19
Помогите одноразово поменять во всех товарах валюту в поле цена.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 10.11.2014 04:50
АндрейV, если речь идет о VM2, то:
1) В админке, в менеджере валют, найдите валюту, которую необходимо установить и запишите ее ID.
2) Сделайте резервную копию базы данных.
3) В PHPMyAdmin выполните SQL-запрос:

Код:
UPDATE `g4vem_virtuemart_product_prices` SET `product_currency`= ID_требуемой_валюты
Ответить | Ответить с цитатой | Цитировать
0 # Adrian1111 06.03.2015 08:50
Спасибо за помощь!
А подскажите как составить запрос на VM2 правильно, чтобы изменить валюту в поле цена только в отдельных категориях товаров, а не везде?

Вот так?:

WHERE `category_id`='id категории где нужно изменить валюту в поле цена'
UPDATE `g4vem_virtuemart_product_prices`
SET `product_currency`= ID_требуемой_валюты
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 07.03.2015 03:16
Adrian, теоретически - да, только WHERE будет последней строчкой. Это сработает, только если в таблице g4vem_virtuemart_product_prices есть столбец category_id (в чем я сильно сомневаюсь). Если его нет, то запрос усложнится.
Ответить | Ответить с цитатой | Цитировать
0 # Adrian1111 10.03.2015 10:03
ДА, нету там этого столбца.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 11.03.2015 04:53
Adrian, это логично и печально. Тогда вам нужно присоединить к выборке id категории, в которой находится товар, для которого используется текущая цена. Запрос получится очень сложный. Попробуйте погуглить SQL UPDATE и SQL JOIN. В теории, вы должны осуществить выборку по таблице товаров, к которой присоединить значение валют и ID категории для каждого товара. После создания такой временной таблицы можно будет написать простой запрос.
Ответить | Ответить с цитатой | Цитировать
0 # Madforit 25.05.2015 10:40
А можно составить запрос на VM2 таким образом, чтобы изменить валюту в поле цена только для товаров определенного производителя в категории?
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 26.05.2015 03:10
Madforit, да можно. Нужно использовать WHERE после основной конструкции, которое будет объединять логическим И(AND) ваши условия, т.е. примерно:
Код: WHERE (id_производителя = `2` AND id_категории = `3`)
Ответить | Ответить с цитатой | Цитировать
0 # Madforit 26.05.2015 10:17
Чтобы не углубляться в изучение SQL, решил вопрос через ID товаров. Примитивно, но работает -) Через CSVI получаем ID товаров со значением валюты, которую нужно заменить. Копируем столбик, вставляем в запрос:
UPDATE `имя БД_virtuemart_product_prices`
SET `product_currency`= ID_валюты
WHERE `virtuemart_product_id`IN(IDтовара1, IDтовара2,...)

Лимита значений для одновременной замены не знаю, у меня было ок 200
Ответить | Ответить с цитатой | Цитировать
0 # Sergeys 19.01.2015 05:50
В MySQL есть product_price - это фактическая цена, а как добавить окончательную цену из VirtueMart
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 19.01.2015 05:55
Sergeys, не понял вашего вопроса. Напишите подробнее.
Ответить | Ответить с цитатой | Цитировать
0 # Sergeys 19.01.2015 21:23
В MySQL в таблице ***_virtuemart_product_prices есть строка product_price - это фактическая цена в разных валютах, но нет основной и окончательной цены преобразованных в рубли, как их добавить в базу
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 20.01.2015 03:50
Sergeys, никак. Они не хранятся в базе а каждый раз создаются автоматически путем пересчета базовой цены с учетом текущего курса и налогов и правил расчета, которые вы создали.
Ответить | Ответить с цитатой | Цитировать
0 # Sergeys 20.01.2015 06:06
Есть же файл в virtuemart который создает в базе запись о фактической цене, если в него внести информацию об основной цене.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 21.01.2015 04:07
Sergeys, не совсем понимаю, что такое основная и фактическая цена. В Virtuemart заносится одна цена, остальные рассчитываются на ее основе. Вот если вы добавляете товар через админку, вы указываете какую-то одну цену, а остальные появляются автоматически после сохранения.
Что именно вам требуется? Опишите подробно. Я предложу вариант.
Ответить | Ответить с цитатой | Цитировать
0 # abgar2000 14.07.2015 12:38
Уважаемый Wedal, подскажите, что означают символы #__{vm} в именах таблиц?
#__{vm}_product
Код:#__{vm}_product
Спасибо
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 24.07.2015 09:29
Код:#__
это префикс таблиц БД Joomla, который вы указываете при установке Joomla. Для каждого сайта он будет свой, потому в запросах указывается так. Если делаете запрос напрямую в базу не через Joomla, то нужно указывать ваш уникальный префикс.
Код:{vm}_
тоже самое, но для таблиц VM.
Ответить | Ответить с цитатой | Цитировать
0 # abgar2000 28.07.2015 13:04
Уважаемый Wedal, спасибо! Не сомневался, что ответите!
Не могли бы Вы подсказать - как добавить категорию товара в уведомлении о заказе?
Вопрос решен, если каждый товат - только в своей категории.
Однако... Если товар указан в нескольких категориях - он дублируется в заказе, столько раз, в скольких категориях этот товар присутствует. Кратно повторяется количество и цена!
- Товар 1 Цена
Категория А
- Товар 1 Цена
Категория В
Цена вычисляется дважды:
Промежуточный итог - складывает все повторы.
Итого: правильная сумма, без дублей повторов.
Как оставить в заказе обе категории, но без дублирования товара, а категории - просто перечислением?
Или, просто убрать дубли, получить в заказе ту Категорию, в которой выбран товар.

Решение - в запросе нужно использовать left join на категории. Как правильно прописать код?
Подробнее - на дружественном форуме.
http://joomlaforum.ru/index.php/topic,216036.0.html
Ссылку можете удалить, она только для Вас.
Ответить | Ответить с цитатой | Цитировать
0 # Виктор Б 06.10.2015 19:59
Я поменял домен сайта, что мне набрать в Joomla в БД - чтобы везде, и в статьях, вообще на всем сайте изменить адрес сайта на новый?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 07.10.2015 03:34
Виктор, сама Joomla не хранит абсолютный адрес сайта нигде, кроме файла configuration.php (переменная $live_site)в корне. Да и в этом файле домен не всегда прописывают.

В базе данных также ничего менять не нужно, но это с тем условием, что все ссылки, которые у вас добавлены в статьях(в том числе и на картинки), имеют относительные адреса.
Если в базе все-таки есть абсолютные адреса, то экспортируйте дамп базы данных, откройте его через Notepad++ или другой продвинутый редактор и поиском/заменой по файлу замените все вхождения старого домена на новый. После этого импортируйте дамп обратно.
Ответить | Ответить с цитатой | Цитировать