hueman
یک شنبه 12 مهر 1388, 17:37 عصر
با سلام به همگی دوستان
توی پروژه ام که با php نوشته میشه از توابع زیادی در mysql استفاده می کنم، هرچند که کلا تابع نویسیم تو mysql تعریفی نداره ولی تا حالا به همچین مشکلی برنخوردم، قضیه از این قراره که یه جدول مربوط به محتوا دارم به اسم T و یه جدول هم مربوط به دسته بندی محتوا به اسم cats، تو جدول cats یه فیلد به اسم PID دارم که درواقع ID دسته پدر رو توش می نویسم و وقتی که یه دسته خودش سردسته باشه برای PID اون 0 رو وارد جدول می کنم. (امیدوارم طرز بیانم گیجتون نکرده باشه)
این وسط یه تابع دارم که باگرفتن CatID هر رکورد از جدول T و همچنین گرفتن ID یک دسته به خصوص به ما بگه که آیا دسته اون رکورد یکی از فرزندان دسته به خصوص هست یا نه؟
تابع هم اینه:
CREATE FUNCTION `IsChildOfRoot`(aid int, rootid int) RETURNS int(12)
begin
declare rv int;
declare pd int;
declare ppd int;
if aid = rootid then
set rv = 1;
else
set rv = 0;
end if;
SELECT PID INTO pd FROM cats where ID = aid;
if pd = rootid then
set rv = 1;
else
set rv = 0;
end if;
A: while pd <> rootid and rv = 0 do
SELECT PID INTO ppd FROM cats where ID = pd;
if ppd = rootid then
set rv = 1;
leave A;
else
set rv = 0;
set pd = ppd;
end if;
end while A;
return rv;
end
حالا مشکل اینجاست که برای بعضی از aid ها (لول دوم به بعد از ساختار درختی دسته ها) وقتی این تابع اجرا میشه mysql توی لوپ وحشتناکی می افته و کامپیوتر متعاقبا هنگ می کنه طوری که باید ریستارت کنم، قاعدتا مشکل باید مربوط به حلقه باشه ولی حتا در مواردی که شرط های حلقه هم برقرار نیستن باز هم این لوپ عجیب و غریب اتفاق می افته
اگه از دوستان کسی ایراد کار رو میدونه ممنون میشم منو از این استیصال در بیاره
توی پروژه ام که با php نوشته میشه از توابع زیادی در mysql استفاده می کنم، هرچند که کلا تابع نویسیم تو mysql تعریفی نداره ولی تا حالا به همچین مشکلی برنخوردم، قضیه از این قراره که یه جدول مربوط به محتوا دارم به اسم T و یه جدول هم مربوط به دسته بندی محتوا به اسم cats، تو جدول cats یه فیلد به اسم PID دارم که درواقع ID دسته پدر رو توش می نویسم و وقتی که یه دسته خودش سردسته باشه برای PID اون 0 رو وارد جدول می کنم. (امیدوارم طرز بیانم گیجتون نکرده باشه)
این وسط یه تابع دارم که باگرفتن CatID هر رکورد از جدول T و همچنین گرفتن ID یک دسته به خصوص به ما بگه که آیا دسته اون رکورد یکی از فرزندان دسته به خصوص هست یا نه؟
تابع هم اینه:
CREATE FUNCTION `IsChildOfRoot`(aid int, rootid int) RETURNS int(12)
begin
declare rv int;
declare pd int;
declare ppd int;
if aid = rootid then
set rv = 1;
else
set rv = 0;
end if;
SELECT PID INTO pd FROM cats where ID = aid;
if pd = rootid then
set rv = 1;
else
set rv = 0;
end if;
A: while pd <> rootid and rv = 0 do
SELECT PID INTO ppd FROM cats where ID = pd;
if ppd = rootid then
set rv = 1;
leave A;
else
set rv = 0;
set pd = ppd;
end if;
end while A;
return rv;
end
حالا مشکل اینجاست که برای بعضی از aid ها (لول دوم به بعد از ساختار درختی دسته ها) وقتی این تابع اجرا میشه mysql توی لوپ وحشتناکی می افته و کامپیوتر متعاقبا هنگ می کنه طوری که باید ریستارت کنم، قاعدتا مشکل باید مربوط به حلقه باشه ولی حتا در مواردی که شرط های حلقه هم برقرار نیستن باز هم این لوپ عجیب و غریب اتفاق می افته
اگه از دوستان کسی ایراد کار رو میدونه ممنون میشم منو از این استیصال در بیاره