Суб меткование

#
Re: Суб меткование: можно ли получить пересечение товаров (инф.эл-тов), а не их объединение?
Здравствуйте.

Поясню на примере.
Имеются такие инф.элементы (в скобках - их метки):
1) ИЭ1 (Москва, Культура, Выставка)
2) ИЭ2 (Питер, Культура, Концерт)
3) ИЭ3 (Самара, Транспорт)

В метод ShowInformationSystem передаю id меток Москва и Культура.
Хотела бы получить на выходе только один элемент - ИЭ1 (т.е. только тот, у которого есть обе переданные метки).
А получаю элементы ИЭ1 и ИЭ2 (т.е. все элементы, у которых есть хотя бы одна из переданных меток).

Вопрос: как сделать, чтобы получать только те инф.элементы, у которых есть все переданные метки?
(у меня придумывается только один способ:
1. передавать в ShowInformationSystem сначала одну метку - получать массив id инф.эл-ов с этой меткой,
2. передавать в ShowInformationSystem вторую метку - получать массив id инф.эл-ов с этой меткой,
3. получать пересечение этих массивов и передавать уже эти id в ShowInformationSystem.
Этот способ мне не нравится, может быть, есть что-то более нормальное?

Нет, это не то: сейчас посмотрела в АПИ - не нашла возможности передавать в ShowInformationSystem список/массив id инф.эл-ов)
#
Re: Суб меткование: можно ли получить пересечение товаров (инф.эл-тов), а не их объединение?
Оказывается, можно:
SELECT *, trt1.tag_id AS tag1, trt2.tag_id AS tag2 FROM information_items_table
INNER JOIN tags_relation_table AS trt1 ON information_items_table.information_items_id = trt1.information_items_id
INNER JOIN tags_relation_table AS trt2 ON information_items_table.information_items_id = trt2.information_items_id
WHERE information_items_table.information_systems_id = 27
HAVING tag1 IN (103) AND tag2 IN (212)


Теперь пытаюсь этот запрос перевести в термины АПИ (пока только по одной метке):
$property['select_fields'] .= ', trt1.tag_id AS tag1 ';
$property['sql_from'] .= ' INNER JOIN tags_relation_table AS trt1 ON information_items_table.information_items_id = trt1.information_items_id ';
$property['sql_having'] = ' HAVING tag1 IN (103) ';

К сожалению, в запрос попадает только секция sql_from:
SELECT SQL_CALC_FOUND_ROWS DISTINCT information_items_table.information_items_id FROM information_items_table LEFT JOIN information_groups_table ON information_items_table.information_groups_id = information_groups_table.information_groups_id AND information_groups_table.information_groups_access IN (0,-1) INNER JOIN tags_relation_table AS trt1 ON information_items_table.information_items_id = trt1.information_items_id WHERE information_items_table.information_systems_id = '27' AND information_items_table.information_items_status = '1' AND (information_items_table.information_items_putend_date >= '2011-07-11 20:32:40' OR information_items_table.information_items_putend_date ='0000-00-00 00:00:00') AND information_items_table.information_items_putoff_date <= '2011-07-11 20:32:40' AND information_items_table.information_items_access IN (0,-1) AND (information_items_table.information_groups_id='0' ) ORDER BY information_items_date desc LIMIT 0, 10


Еще раз посмотрела АПИ, - вроде все верно. Поискала по форуму, но нигде не нашла примеров использования секций $property['select_fields'] и $property['sql_having'].
Помогите, пожалуйста!
#
Re: Суб меткование
k-mo.ru, а зачем вам этот запрос делать через API класса InformationSystem?
Запрос придумали? Он работает? Так и замечательно - выполняйте его через методы класса DataBase, получайте список идентификаторов инфоэлементов и делайте по этим идентификаторам фильтр в методе ShowInformationSystem(), все будет отлично работать!
Заказов не беру. Консультирую редко.
#
Re: Суб меткование
Kotoff,
простите за глупый вопрос: а как делать по этим идентификаторам фильтр в методе ShowInformationSystem()?
Что-то я не вижу в АПИ.
#
Re: Суб меткование
Все, разобралась.
Kotoff,
спасибо.

Но все-таки интересно, почему не получилось передать через $property['select_fields'] и $property['sql_having']???
#
Re: Суб меткование
k-mo.ru, пожалуйста! )
Заказов не беру. Консультирую редко.
#
Re: Суб меткование
Подскажите, этим кодом я смогу вывести элементы из инфосистемы у которых указана одна метка(id = 17)
И в нем указано $property['OrderField'] = 'RAND()';  а мне нужно отсортировать по дате, как это сделать в 5 версии?

<?

/* Вывод информационных систем */

$InformationSystem = new InformationSystem();



$external_propertys=array();

$external_propertys['ОтображатьСсылкуНаАрхив']=1;

$external_propertys['ОтображатьСсылкиНаСледующиеСтраницы']=0;

$property['OrderField'] = 'RAND()';

$property['tags'] = array(17);



/* Количество выводимых элементов */

$item_count =99;



$InformationSystemId = 1;



$InformationGroupId = false;  // false - из всех групп, 0 - из корневой группы



$InformationSystem->ShowInformationSystem($InformationSystemId, $InformationGroupId, 'АкцииГлавнаяТоп ',$item_count,0,$external_propertys,$property);  

?>
#
Re: Суб меткование
Никто не подскажет? С 5 совсем мало опыта
#
Re: Суб меткование
<?php


$InformationSystem = & singleton('InformationSystem');
$property['OrderField'] = 'RAND()';
$property['tags'] = array(134);
$item_count =99;
$InformationSystemId = 11;
$InformationGroupId = false;  // false - из всех групп, 0 - из корневой группы
$InformationSystem->ShowInformationSystem($InformationSystemId, $InformationGroupId, 'СписокПортфолиоСоздание ',$item_count,0,$property);  

?>
Попытался вывести так инфоэлементы, по метке, но вылезли все элементы, хотя по этой метке их всего 3 http://joxi.ru/DrlRo9PTvK3QZ2
Авторизация