сейчас переносил базу новую с отладочной машины на реальный виртуальный хостинг, соответственно юзер там один по умолчанию.
есть там процедура хранимая с большим динамическим кодом ... и вдруг она мне выдает, что selec denied for user мой-ip для таблицы shop2.off_stockstatus, причем отдельно select для нее исполняется без проблем, листаю ее
эта таблица приделана к запросу так :
INNER JOIN shop2.off_stockstatus
ON off_tovar.STOCKSTATUS = off_stockstatus.stockstatus_id
долго думал ... думать плохо так как доолгий динамический код строится, ненаглядно, потом убрал inner join и засунул в условие вместо join в where, может и некрасиво, но
where off_tovar.STOCKSTATUS = off_stockstatus.stockstatus_id and ... и т.д.
заработало... теперь нефига не понимаю. в других процедурах вроде как JOIN есть, все работает, какого черта ей тут если через JOIN то прав на select не хватает, а если через WHERE то хватает ....
видать спать пора. буду благодарен если кто мысль подкинет, так-то оно и через where работает, но таки понять охота. и ведь зараза единственная ХП во всей базе где запрос динамичеси пишется, так сразу не побаловаться с кодом чтоб наглядно.
.... так, в общем сделал фгагмент из динамического кода для теста ,то есть допустим даже коротко если так :
SELECT off_tovar.TOVAR_ID
, off_tovar.ARTIKUL
, off_tovar.TOVAR_NAME
, CEILING(off_tovar.PRICE_ROZN) as PRICE_ROZN
, off_contragents.SKIDKA_OUT as userskidka
#, off_tovar.SKIDKA as tovskidka
, if(off_tovar.SKIDKA>off_contragents.SKIDKA_OUT,off_tovar.SKIDKA,off_contragents.SKIDKA_OUT) as resultskidka
,CEILING(off_tovar.PRICE_ROZN*(1-( (if(off_tovar.SKIDKA>off_contragents.SKIDKA_OUT,off_tovar.SKIDKA,off_contragents.SKIDKA_OUT)) /100))) as resultprice
#, off_tovar.WARRANT
, off_stockstatus.stockstatus_name
FROM
off_contragents, off_tovar
INNER JOIN shop2.off_stockstatus
ON off_tovar.STOCKSTATUS = off_stockstatus.stockstatus_id
where off_contragents.USER_ID =0
and off_tovar.stockstatus>0
то выполняя его в DBFORGE вижу:
SQL.sql: Ошибка: (1,1): SELECT command denied to user 'taratata'@'111-111-111-111.broadband.corbina.ru' for table 'off_stockstatus'
а ежели пишу без join, перенеся его первым условием в WHERE
SELECT off_tovar.TOVAR_ID
, off_tovar.ARTIKUL
, off_tovar.TOVAR_NAME
, CEILING(off_tovar.PRICE_ROZN) as PRICE_ROZN
, off_contragents.SKIDKA_OUT as userskidka
#, off_tovar.SKIDKA as tovskidka
, if(off_tovar.SKIDKA>off_contragents.SKIDKA_OUT,off_tovar.SKIDKA,off_contragents.SKIDKA_OUT) as resultskidka
,CEILING(off_tovar.PRICE_ROZN*(1-( (if(off_tovar.SKIDKA>off_contragents.SKIDKA_OUT,off_tovar.SKIDKA,off_contragents.SKIDKA_OUT)) /100))) as resultprice
#, off_tovar.WARRANT
, off_stockstatus.stockstatus_name
FROM
off_contragents, off_tovar, off_stockstatus
where off_tovar.STOCKSTATUS = off_stockstatus.stockstatus_id AND off_contragents.USER_ID =0
and off_tovar.stockstatus>0
то все зашибись ....
в чем прикол с нехваткой права на select к таблице которая в JOIN не пойму ... а так так это хостинг то нерешаемо.
причем рядом работаю скрипты с джойнами, типа такого :
FROM
off_tovar
LEFT OUTER JOIN off_groups
ON off_tovar.GRP_ID = off_groups.GRP_ID
LEFT OUTER JOIN off_subgrp
ON off_tovar.SUBGRP_ID = off_subgrp.SUBGRP_ID
WHERE
off_tovar.IN_PRICE = 1
AND off_groups.NO_PUBLISH = 0
AND off_groups.GRP_ID = pGrpId
GROUP BY
и хоть-бы хны ...