Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Givi 31.07.2002 21:20
Есть некая таблица items в базе, с полями:items item_id >> item_title >> item_type_id >> item_brand_idИ ещё есть две таблицы - types и brands вот с такой структурой:
types type_id >> type_name brands brand_id >> brand_nameНикак не соображу, что нужно сделать, чтобы с минимальными затратами памяти проставить в таблицу items значения item_type_id и item_brand_id. Алгоритм нахождения соответствий следующий - если значение type_name или brand_name таблиц types или brands, соответственно, содержиться в поле item_title таблицы items, то должны быть проставлены соответствующие айдишники. Пробую это делать вот таким макаром:
@BTUpdate[] $updtTable[^table::sql{ SELECT item_id, item_title FROM items }] ^updtTable.menu{ ^void:sql{ UPDATE items SET item_brand_id='^getBrandId[$updtTable.item_title]', item_type_id='^getTypeId[$updtTable.item_title]' WHERE item_id='$updtTable.item_id' } } $updtTable[] @getTypeId[sString] $typeT[^table::sql{ SELECT type_id, type_name FROM types }] ^typeT.menu{ ^if(^sString.match[$typeT.type_name][gi]){ $result[$typeT.type_id] } } ^if(!def $result){$result[0]} @getBrandId[sString] $brandT[^table::sql{ SELECT brand_id, brand_name FROM brands }] ^brandT.menu{ ^if(^sString.match[$brandT.brand_name][gi]){ $result[$brandT.brand_id] } } ^if(!def $result){$result[0]}Ну, вызывается ^BTUpdate[]. Пока записей в types и brands не очень много (3-4), всё рулит, если больше, то вылезает out of pool memory: failed to allocate 64 bytes; already allocated on pool: 12385140 bytes in 393660 times. В таблице items порядка 1000-1500 записей. Я так полагаю, что в принципе это можно сделать средствами MySQL, только вот не знаю как :(( Подскажите плиzzz что-нибудь...