TuBu
Guest
Замена group_concat в MYSQL 4.0
Здравствуйте. У меня возник следующий вопрос.
Есть сервер (не мой), который содержит информацию о товарах. Этот сервер позволяет свои товары перепродавать (resellers). Для этого он предоставляет для скачивания XML файл, в котором есть вся необходимая для реселлеров информация о товарах.
Есть таблица товаров.
create table tovar (id int not null, name varchar(255) not null)
(Все ключи и ненужные поля я не пишу).
У товаров есть дополнительные аттрибуты (отношение 1 ко многим), то есть
create table atribute (id int not null, tovar int not null, name varchar(255) not null, pole1 varchar(255) not null, pole2 varchar(255) not null)
(Это не все поля, но для описания проблемы хватит)
Данных очень много и даже если производить синхронизацию с основным сервером раз в сутки, мускуль долго работает только на сравнение / обновление данных.
Поэтому я решил попробовать сделать таким образом.
Для отдельно взятого товара делаю:
select md5(group_concat(name, pole1, pole2)) as md5, tovar from atribute group by tovar.
Group_concat - аналог sum() только данные конкатенирует а не складывает.
И если md5 совпадает с md5 от полученных данных, значит никакие из атрибутов не изменились, и можно лишний раз базу не дергать для сравнения.
Проблема собственно в следующем: group_concat работает только начиная с версии mysql 4.1
Какая альтернатива есть для этого в 4.0 и првильным ли путем я пошел. Возможно есть более правильные способы для сравнения множества данных в базе.
Рад буду услышать любые предложения / рекомендации
-~{}~ 20.09.04 15:38:
Вот так вот.
Никто не хочет мне отвечать.
Здравствуйте. У меня возник следующий вопрос.
Есть сервер (не мой), который содержит информацию о товарах. Этот сервер позволяет свои товары перепродавать (resellers). Для этого он предоставляет для скачивания XML файл, в котором есть вся необходимая для реселлеров информация о товарах.
Есть таблица товаров.
create table tovar (id int not null, name varchar(255) not null)
(Все ключи и ненужные поля я не пишу).
У товаров есть дополнительные аттрибуты (отношение 1 ко многим), то есть
create table atribute (id int not null, tovar int not null, name varchar(255) not null, pole1 varchar(255) not null, pole2 varchar(255) not null)
(Это не все поля, но для описания проблемы хватит)
Данных очень много и даже если производить синхронизацию с основным сервером раз в сутки, мускуль долго работает только на сравнение / обновление данных.
Поэтому я решил попробовать сделать таким образом.
Для отдельно взятого товара делаю:
select md5(group_concat(name, pole1, pole2)) as md5, tovar from atribute group by tovar.
Group_concat - аналог sum() только данные конкатенирует а не складывает.
И если md5 совпадает с md5 от полученных данных, значит никакие из атрибутов не изменились, и можно лишний раз базу не дергать для сравнения.
Проблема собственно в следующем: group_concat работает только начиная с версии mysql 4.1
Какая альтернатива есть для этого в 4.0 и првильным ли путем я пошел. Возможно есть более правильные способы для сравнения множества данных в базе.
Рад буду услышать любые предложения / рекомендации
-~{}~ 20.09.04 15:38:
Вот так вот.
Никто не хочет мне отвечать.