Выбрать и умножить цену

Uriys

Постоялец
Регистрация
21 Июн 2011
Сообщения
51
Реакции
0
Добрый день помогите решить задачку есть база данных для Joomla в ней есть статьи от компонента K2, в компоненте есть дополнительные поля, в котором есть цена.

Нужно через базу данных умножить цену на 26.5

Загвоздка в чем, в базе есть jos_k2_items в ней все статьи
в каждой статье есть поле extra_fields в нем заданы все параметры вот в таком виде:

[{"id":"1","value":"31.05, 7 \u043d\u043e\u0447\u0435\u0439"},{"id":"2","value":"\u0415\u0433\u0438\u043f\u0435\u0442"},{"id":"28","value":"\u0428\u0430\u0440\u043c \u0415\u043b\u044c \u0428\u0435\u0439\u0445"},{"id":"4","value":"Panorama Naama Heights"},{"id":"5","value":"Standart"},{"id":"6","value":"DBL"},{"id":"7","value":"6"},{"id":"10","value":"\u0432\u043a\u043b\u044e\u0447\u0435\u043d"},{"id":"11","value":"1"},{"id":"29","value":"1"},{"id":"30","value":"1"},{"id":"31","value":"\u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439"},{"id":"32","value":"1"},{"id":"33","value":"1 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0439"},{"id":"40","value":"275"},{"id":"8","value":"235"},{"id":"34","value":"Pegas"},{"id":"36","value":"4"},{"id":"37","value":["1","3","4","7"]},{"id":"38","value":""},{"id":"39","value":""}]

так вот "id":"8","value":"235" это есть цена

Как мне из таблицы jos_k2_items с поля extra_fields выбрать все что равняется {"id":"8","value":"235"} и умножить на 26.5

Причем ID везде одинаковый а вот value в каждом материале разное.
 
Это обязательно при помощи MySQL сделать? ИМХО гораздо проще PHP-функцию написать, которая сделает такое преобразование.
 
можно и через PHP
 
Нужно через базу данных умножить цену на 26.5

Надо в базе сделать замену или просто изредка делать выборку с таким умножением
Выборку чисто новых прайсов через SUBSTRING_INDEX и SUBSTRING можно замутить, но это не самая разумная нагрузка. Так разве что для отчётов редких можно поизвращаться.

Так а в чем проблема тогда? Проходитесь по базе, берёте поле extra_fields, заменяете в нём цену.
алгоритм подробнее:
выборка из базы extra_fields
json_decode($text, true) и обработка возможной ошибки
foreach по ссылке для поиска "id":"8"
математическая операция
json_encode($text)
вставка в базу, если новое значение надо сохранять.

Бекап таблицы не забывайте делать пока не оттестируете всё.
 
  • Нравится
Реакции: Nei
Нужно умножить число и сделать замену, на данном примере ( {"id":"8","value":"235"} ) это число 235, его нужно умножить и потом результат поставить на место, на данном примере должно получиться ( {"id":"8","value":"6227,5"} )

К сожалению в программировании не очень (
 
Нужно умножить число и сделать замену, на данном примере ( {"id":"8","value":"235"} ) это число 235, его нужно умножить и потом результат поставить на место, на данном примере должно получиться ( {"id":"8","value":"6227,5"} )

К сожалению в программировании не очень (

То есть требуется готовую рабочую функцию наваять? :) За это вообще деньги платят программистам)) Советом помочь - это одно, готовый код писать - другое совсем.

...впрочем может конечно найдётся кто-то и из альтруистических соображений займётся...
 
Не тестировал, но что-то в этом роде (под Joomla)

Сохранить в корне сайта в change_price.php

PHP:
<?php
define('_JEXEC', 1);
error_reporting(E_ALL);
ini_set('display_errors', true);

if (file_exists(__DIR__ . '/defines.php'))
{
    include_once __DIR__ . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}

require_once JPATH_BASE . '/includes/framework.php';
// Instantiate the application.
$app = JFactory::getApplication('site');
$db = JFactory::getDBO();

// Тут вписать правильное название таблицы
$tableName = 'jos_k2_items'; // или так #__k2_items
// Тут вписать название колонки с ключами (id, entity_id, или что-то в этом роде, чаще всего идет первой колонкой таблицы)
$primaryColumnName = 'id';

$db->setQuery("SELECT `$primaryColumnName`, `extra_fields` FROM $tableName");
$rows = $db->loadObjectList();

if ($db->getErrorNum()) {
    exit('Ошибка в запросе: ' . $db->getErrorMsg());
}

$counter = 0;
foreach ($rows as $row) {
    $extraFields = json_decode($row->extra_fields);
    if (is_array($extraFields)) {
        foreach ($extraFields as &$field) {
            if ($field->id === 8) {
                // Умножить на курс
                $field->value *= 26.5;
                $counter++;
            }
        }

        $db->setQuery("UPDATE $tableName SET `extra_fields` = '" . json_encode($extraFields) . "' WHERE `$primaryColumnName` = {$field->$primaryColumnName} LIMIT 1");
        $db->query();
    }
}

echo "Сделано замен: $counter";
 
Назад
Сверху