Таблица с 2-мя полями - ID и OBJ:
ID - целочисленное значение;
OBJ - список объектов (строка, содержащая имена, через запятую);
Запрос:
ARR - массив, содержащий список объектов (строка, содержащая имена, через запятую);
Нужно получить:
ID строк, поля OBJ которых содержат только те объекты, что есть в ARR;
ID строк, поля OBJ которых содержат объекты из ARR и ещё X объектов, не лежащих в ARR.
Вопрос, как оптимально решить эту задачу?
Спустя 20 дней, 6 часов, 59 минут, 4 секунды (5.11.2007 - 21:39) maximus написал(а):
Насчет оптиальности не знаю, но вполне можно попробовать использую LIKE %...%. Алгоритм:
ты обходишь массив, каждое значение затачивая в (OBJ LIKE "%'.$value.'%") приблизительный код:
ты обходишь массив, каждое значение затачивая в (OBJ LIKE "%'.$value.'%") приблизительный код:
Код |
... $ARR=explode(',',$ARR); foreach($ARR as $k=>$value){$ARR[$k]='(OBJ LIKE "%'.$value.'%")';} // здесь можно эксперементировать с другими функциями обхода $ARR=implode('AND',$ARR); $query='SELECT ID FROM table WHERE '.$ARR; ... |
Попробуй такой вариант
Спустя 4 часа, 7 минут, 54 секунды (6.11.2007 - 01:47) Ghost написал(а):
maximus - в корне неправильно.
1. select id from ... where obj in ('...', '...', '...', .....)
2. select id from ... where obj in ('...', '...', '...', .....) union select * from (select id from ... where obj not in ('...', '...', '...', .....) limit X) as gen
1. select id from ... where obj in ('...', '...', '...', .....)
2. select id from ... where obj in ('...', '...', '...', .....) union select * from (select id from ... where obj not in ('...', '...', '...', .....) limit X) as gen