Есть таблица Есть запросы [sql]select id from table where id=3 or id=2 select id from table where id=3 or id=1 select id from table where id=3 or id=5 [/sql] Нужно запросом выбрать общий результат (id, который есть во всех трех выборках) Результат id=3 Нужно что-то типа 1. делаю выборку по каждому запросу 2. запоминаю результат выборки 3. сравниваю результаты на факт пересечения Как все это сделать средствами мускула?
еще такой вопрос, чтобы не плодить темы select @result:=id from table сколько будет жить переменная @result и как ее убить принудительно?
счас так и делаю но IN получается по селекту и в результате тормоза попробовал селекты в которые смотрю IN-ом записать в переменую, чтобы дергать только один раз тормоза менше, но есть (выполнение запроса до 3 сек.)
inline насколько я знаю, будет жить пока генерируется страница, т.е. это сессионая переменная. как только апач автоматом или сам вручную закроешь соединение с бд, переменная умрёт с другой стороны пхп поддерживает постоянное соединение с базой данных (я не знаю как это делается), тогда переменная будет жить пока не закроется соединение вручную. обнулять нет смысла. можешь присваивать нулл. в принципе, мог бы и сам проверить - это занимает всего 10 минут
а как select id from table записать в переменую мускула в формате 1,2,....7 пробовал так select @res:=CONCAT_WS(',',@res,id) from table результат 7
inline тут тебе помогут только высокопрофессиональные телепаты экстра-класса. берут по 500 баксов в час за консультацию... точнее - ты молчишь, а они тебе всё рассказывают как надо делать
на этот момент вопрос такой Есть таблица table (id) id 1 2 3 4 5 6 7 Как средствами мускула получить переменую равну строке "1,2,3,4,5,6,7" ???
group_concat_max_len изменил, но длина выводимого GROUP_CONCAT(CAST(id AS CHAR) SEPARATOR ',') не увеличивается
inline даже не представляю как это сделать join-ами. да и не факт что быстрее будет. ищи где у тебя что тормозит
inline по-мойму ты что-то не то мутишь. неправильно поставленные задачи порождают неправильные решения. изначально какая стоит задача? зачем тебе переменные в мускуле? или функции работы со строками?
Есть запрос [sql]select distinct MARKET_RELATIONS.val as id, MARKET_VALS.name as name from MARKET_RELATIONS, MARKET_VALS where MARKET_RELATIONS.object in (select MARKET_RELATIONS.object from MARKET_RELATIONS where MARKET_RELATIONS.properti=0 and MARKET_RELATIONS.val=528) and MARKET_RELATIONS.object in (select MARKET_RELATIONS.object from MARKET_RELATIONS where MARKET_RELATIONS.properti=2 and MARKET_RELATIONS.val=21) and MARKET_RELATIONS.properti=1 and MARKET_RELATIONS.val=MARKET_VALS.id[/sql] использование IN, а точнее дергание БД запросами, в которые "смотрит" IN тормозит выполнение запроса нужно запоминать результат запроса, чтобы IN "смотрел" в уже ранее выбраные данные, а не каждый раз выполнялся запрос
[sql]SELECT DISTINCT MARKET_RELATIONS.val AS id, MARKET_VALS.name AS name FROM MARKET_RELATIONS, MARKET_VALS WHERE MARKET_RELATIONS.object IN (SELECT MARKET_RELATIONS.object FROM MARKET_RELATIONS WHERE (MARKET_RELATIONS.properti = 0 AND MARKET_RELATIONS.val = 528) OR (MARKET_RELATIONS.properti = 2 AND MARKET_RELATIONS.val = 21)) AND MARKET_RELATIONS.properti = 1 AND MARKET_RELATIONS.val = MARKET_VALS.id[/sql] поставь индексы по val, object, properti попробуй запрос без и с DISTINCT - тут тоже бывает затык.