Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2008, 15:38   #1
krok
Клонирую людей
Пользователь
 
Аватар для krok
 
Регистрация: 22.02.2008
Сообщений: 22
Восклицание Проблема)

Приветствую вас!
Помогите разобраться.

Читаем из xml файла данные, делаем запрос к таблице товаров находим товар скажем "сони" берем ИД товара, заносим данные из xml в бд (таблица shopitems) под ИД "сони" (если название товара из xml фала совпадают т.е. тоже "сони"), если они там есть то обновляем если нету то добавляем. Если названия не совпадают то заносим в таблицу vague_goods. Потом админ сайта сопоставляет товары из табл. vague_goods (скажем в xml было "сониЕ") с таблицей shopitems. И обновление товара идет нормально.

Вот скрипт выполняющий это (именно обновление\добавление, сопоставления это не касается):

PHP код:
if(is_array($info))
{
    foreach(
$info as $dat)
    {
        
$xml simplexml_load_file($dat['file']);
        
$file $xml->name;

        if(!empty(
$file))
        {
            foreach (
$file as $data)
            {
                
$name $data['name'];
                
$ID $data->ID['ID'];
                
$price $data->Price['Price'];
                
$presence $data->Presence['Presence'];
                
$url_goods $data->url_goods['url_goods'];

                
$res_itemID $db->QueryRow("SELECT itemID FROM $dbtable[shopitems] WHERE name = '$name' AND userID = '$dat[userID]';");

                if(empty(
$res_itemID))
                    
$res_itemID $db->QueryRow("SELECT ID FROM $dbtable[item] WHERE title = '$name';");

                if(!empty(
$res_itemID))
                {
                    
$db->Run("REPLACE INTO $dbtable[shopitems] SET originalID = '$ID', name = '$name', price = '$price', presence = '$presence', url_goods = '$url_goods', userID = '$dat[userID]', itemID = '$res_itemID[ID]';");
                }
                    else
                {
                    
$db->Run("REPLACE INTO $dbtable[vague_goods] SET originalID = '$ID', name = '$name', price = '$price', presence = '$presence', url_goods = '$url_goods', userID = '$dat[userID]';");
                }
            }
        }
    }

Но когда товар удаляют из xml он остается в бд.
Вопрос как удалить его из базы?
Если перед обновлением удалять все товары из shopitems, тогда все сопоставление к черту. Админу снова придется сопоставлять.
Пока на уме у меня только сводная таблица товаров...
Можно ли сделать без нее? И как? Если знаете то пожалуйста по подробней изложите.

Заранее благодарю!

ЗЫ. Надеюсь сам нормально изложил...
В мире нет Вечных Двигателей, зато полно Вечных Тормозов.
krok вне форума Ответить с цитированием
Старый 15.12.2008, 16:59   #2
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

не сильно читал первый пост, но можешь для каждой строки из выборки товаров в твоей таблицы проверять его наличие в xml-ке и удалять если проверка не прошла, потом уже изменять оставшиеся строки и добавлять новые
свободен...
wall66 вне форума Ответить с цитированием
Старый 15.12.2008, 17:51   #3
krok
Клонирую людей
Пользователь
 
Аватар для krok
 
Регистрация: 22.02.2008
Сообщений: 22
По умолчанию

там xml не одна, + размер довольно большой, делать выборку довольно трудоемко для сервера... в одном xml от 1000 товаров будет, а их от 15 шт точно будет
В мире нет Вечных Двигателей, зато полно Вечных Тормозов.
krok вне форума Ответить с цитированием
Старый 15.12.2008, 21:06   #4
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с gets() TheWanderer Общие вопросы C/C++ 12 21.11.2008 14:35
проблема bill Свободное общение 7 08.07.2007 21:05
Проблема Vanek B Общие вопросы Delphi 4 17.12.2006 13:30