PDA

View Full Version : جستجو



parnian
یک شنبه 11 اردیبهشت 1384, 09:55 صبح
چه دلیلی می تونه وجود داشته باشه که یک برنامه جستجو از mysql به روی localhost جواب بده اما روی host جوابش منطقی نباشه؟

sirbijan
یک شنبه 11 اردیبهشت 1384, 12:52 عصر
به خیلی چیزها ممکنه بستگی داشته باشه. کدت را بزار اینجا ببینیم چیکار کردی، صورت مساله را درست مطرح کن دختر خوب اگر جواب درست میخوای. :sunglass:

parnian
یک شنبه 11 اردیبهشت 1384, 16:41 عصر
کدم رو کامل نمی تونم اینجا بذارم چون کلی کد و کلی فرم دارم اما این query من هستش
$sqlcommand = "select distinct concat(member_info.name,' ',member_info.family) as fullname,sath.name_s,job_info.day,job_info.shift,s ection_info.name_v,concat(job_info.time_s_h,':', job_info.time_s_d) as times,concat(time_e_h,':',time_e_d) as timee,member_info.member_p from sath,edu_stand,member_info,job_info,section_info where sath.sath=edu_stand.sath and edu_stand.member_p=member_info.member_p and member_info.member_p=job_info.member_p and job_info.number_v=section_info.number_v ".$comp." group by member_info.member_p";


روی local جواب می ده اما وقتی upload می کنم دیگه جواب منطقی نمی ده جالبه که بدونید ورژن host من از local زیادتره

houtanal
یک شنبه 11 اردیبهشت 1384, 20:02 عصر
پیغام خطا؟

parnian
دوشنبه 12 اردیبهشت 1384, 08:56 صبح
پیام خطایی نداره جوابی که بر می گردونه به جای این searchای که انجام می ده ربطی به کلمه ای که من برای search نوشتم نداره.برید لطفا خود سایت رو ببینید
http://iranni.net/motahari
به قسمت جستجو برید و به جای نام وارد کنید علی. حالا جواب ها رو ببینید که ربطی به کلمه علی نداره ولی من همین فرم رو برای علی روی localکه اجرا می کنم درسته

oxygenws
دوشنبه 12 اردیبهشت 1384, 13:07 عصر
سیستم شما که Xoops هستش، بخش های جستجو رو خودتون نوشتید؟
با بانک های خود سیستم کار می کنید؟!
و ...

برای تست، در زیر کوئری ای که در بالا نوشتید، بنویسید:

die($sqlcommand);
و آپلود کنید و نتیجه خروجی برای "علی" رو ببینید و خروجی رو اینجا بنویسید.

ممنون.

parnian
دوشنبه 12 اردیبهشت 1384, 14:16 عصر
آره سیستم زوپ هست ولی بخش جستجو رو خودم نوشتم در واقع هسته زوپ رو گرفتم و 6 تا 7 تا ماژول خودم بهش اضافه کردم

parnian
دوشنبه 12 اردیبهشت 1384, 14:27 عصر
این هم خروجی

نتیجه جستجو

select distinct concat(member_info.name,' ',member_info.family) as fullname,sath.name_s,job_info.day,job_info.shift,s ection_info.name_v,concat(job_info.time_s_h,':', job_info.time_s_d) as times,concat(time_e_h,':',time_e_d) as timee,member_info.member_p from sath,edu_stand,member_info,job_info,section_info where sath.sath=edu_stand.sath and edu_stand.member_p=member_info.member_p and member_info.member_p=job_info.member_p and job_info.number_v=section_info.number_v and ((member_info.name like '%علی%') or (member_info.name like '%علی%')) group by name_s


لطفا نظرتون رو درباره سایت هم بگید چه گرافیکی چه برنامه نویسی چون این سایت سایت رسمی درمانگاه مطهری شیراز هست و بهتره قبل از اعلام رسمی همه اشکالاتش برطرف شه
ممنون

** ویرایش شد **
برای خونده شدن ویرایش شد!!!!!!

sirbijan
دوشنبه 12 اردیبهشت 1384, 15:01 عصر
اگر لطف کنی کدت را بین تگهای [ c o d e ] و [ / c o d e ] قرار بدی که من هم بتونم بخونمش ممنون میشم. تنها دو نکته: در آینده قطعا از استفاده از Xoops پشیمون میشی، اینو یک تجربه چند ساله در www.iranphp.net به من ثابت کرده! بعد هم استفاده از DISTINCT تو query چندان قشنگ نیست، همیشه میشه با GROUP BY حلش کرد قضیه را. بابت کد نویسی هم گفتی، من کل کدت را ندیدم ولی معمولا استاندارده که تو query نویسی کلمات خود SQL را با حروف بزرگ بنویسی و فقط اسم فیلدهات را کوچیک. یعنی مثلا اینجوری:


$query = "SELECT someField FROM someTable WHERE somethingIsTrue";

اینجوری قشنگتره!

sirbijan
دوشنبه 12 اردیبهشت 1384, 15:02 عصر
سایت را همین الان دیدم، ببینم منظورت از گرافیک اون دو تا عکس گنده ای که گذاشتی تو background؟!

parnian
دوشنبه 12 اردیبهشت 1384, 16:48 عصر
چرا از استفاده از زوپ پشیمون می شم .شما در سایت iranphp با چه مشکلی برخوردید در تجربه 2 سالتون؟
در سایتی که دارید از خود کلا ماژول های زوپ استفاده کردید یا خودتون جایی ماژول نوشتید یا کد ها رو دستکاری کردید؟چون تقریبا این سایت قسمتهای مهمش به ماژولهای زوپ ربطی نداره فعلا هم بیخیال گرافیک سایت و کد نویسی من چون من دایم دارم سایت رو عوض می کنم واحتمالا به خاطر همین شما 2 تا ساختمون بزرگ دیدید
این هم دوباره کدها


select distinct concat(member_info.name,' ',member_info.family) as fullname,sath.name_s,job_info.day,job_info.shift,s ection_info.name_v,concat(job_info.time_s_h,':', job_info.time_s_d) as times,concat(time_e_h,':',time_e_d) as timee,member_info.member_p from sath,edu_stand,member_info,job_info,section_info where sath.sath=edu_stand.sath and edu_stand.member_p=member_info.member_p and member_info.member_p=job_info.member_p and job_info.number_v=section_info.number_v and ((member_info.name like '%علی%') or (member_info.name like '%علی%')) group by name_s

sirbijan
سه شنبه 13 اردیبهشت 1384, 00:53 صبح
خوب، این از query شما:


SELECT
DISTINCT CONCAT(member_info.name,' ',member_info.family) AS fullname,
sath.name_s,
job_info.day,
job_info.shift,
section_info.name_v,
CONCAT(job_info.time_s_h,':', job_info.time_s_d) AS times,
CONCAT(time_e_h,':',time_e_d) AS timee,
member_info.member_p
FROM
sath,
edu_stand,
member_info,
job_info,
section_info
WHERE
sath.sath = edu_stand.sath AND
edu_stand.member_p = member_info.member_p AND
member_info.member_p = job_info.member_p AND
job_info.number_v = section_info.number_v AND
(
(member_info.name LIKE '%علی%')OR (member_info.name LIKE '%علی%')
)
GROUP BY name_s


یک سوال: چرا از distinct استفاده میکنی؟
یک مساله: عصبانی نشی، ولی اگر همینجوری از ساختار این query چیزی را نتونیم درست کنیم باید ERD را هم بیاری! وگرنه با یک select که کاری نمیشه کرد!

parnian
سه شنبه 13 اردیبهشت 1384, 08:59 صبح
از distinc استفاده کردم چون این query به نظرم query درستی بود .حالا استفاده از distinc چه ایرادی داره؟
در مورد مشکلتون در سایت iranphp هم جوابی واسم ننوشته بودید.
منظورتون از ERD چیه؟
یعنی چی رو اینجا بذارم تا متوجه مشکلم بتونید بشید؟
ممنون

sirbijan
پنج شنبه 15 اردیبهشت 1384, 17:56 عصر
سلام
پرنیان جان ببخش که کمی دیر شد، حواسم به اینجا نبود. ببین ERD مخفف Entity Relationship Diagram هست و این همون دیاگرامیه که شما روابط بین جداولت را توش نشون میدی، همون روابط یک به چند و چند به چند و از اینجور حرفها.

من این query شما را یکبار دیگه نوشتم به این صورت:


SELECT
CONCAT(member_info.name,' ',member_info.family) AS fullname,
sath.name_s,
job_info.day,
job_info.shift,
section_info.name_v,
CONCAT(job_info.time_s_h,':', job_info.time_s_d) AS times,
CONCAT(time_e_h,':',time_e_d) AS timee,
member_info.member_p
FROM sath
LEFT JOIN edu_stand ON sath.sath = edu_stand.sath
LEFT JOIN member_info ON edu_stand.member_p = member_info.member_p
LEFT JOIN job_info ON member_info.member_p = job_info.member_p
LEFT JOIN section_info ON job_info.number_v = section_info.number_v

WHERE
member_info.name LIKE '%علی%'


این را اجرا کن ببین چی جواب میده. پرنیان جان من وقتی میگم چرا از فلان چیز استفاده کردی شما باید بگی میخواستم بهمان کار را بکنم بنابر این فکر کردم استفاده از فلان چیز جواب میده. من از کجا بفهمم که تو چرا تشخیص دادی استفاده از DISTINCT درسته؟ ببین، mySql تا حدی با sql استاندارد (ANSI SQL) فرق داره. یکی از چیزهایی هم که تو mySql واقعا فرق میکنه و البته ادعا میکنن بهتره ولی من فکر میکنم واقعا افتضاح تر شده همین قضیه GROUP BY و توابع اون هست، از COUNT بگیر تا برو بالا. اینها اومدن کاری کنن که به نظر راحتتر بشه برای یک query کوچیک، ولی کل استاندارد را بردن زیر سوال. در مورد DISTINCT هم میشه گفت که شما تقریبا هیچوقت به اون نیاز نداری مگه اینکه در یک ستونی بدونی که رکوردهایی با مقادیر مساوی داری که اونوقت برای اینکه بفهمی چند تا رکورد غیر مساوی (unique) داری از DISTINCT استفاده میشه. من الان داشتم mysql manual را میخوندم و دیدم تنها مثالی که برای DISTINCT زده به صورت COUNT(DISTINCT folanSotoon) بوده که این حرف من را تایید میکنه. حتی در این صورت هم شما نیازی به استفاده از DISTINCT نداری و میتونی تنها از همون تابع COUNT استفاده کنی و بعد از اینکه نتایج شما به PHP برگشت از تابع mysql_num_rows بفهمی چند تا رکورد داشتی. گیج کننده شد، نه؟! نگاه کن، فرض کن من یک جدول یک فیلدی دارم به اسم someTable که اسم این تنها فیلدش هم someField هست. من رکوردهای زیر را دارم:


bijan
babak
hasan
hosein
bijan
taghi
naghi
omid
manghool
bijan
folani
babak
yekKasi



حالا فرض کن میخوام query بنویسم که بفهمم چند تا رکورد غیر یکسان دارم. اگر دقت کرده باشی در این رکوردها اسم bijan سه بار و اسم babak دو بار تکرار شده. من میتونم به ۲ صورت query بنویسم:


SELECT
COUNT(DISTINCT(someField))
FROM someTable

که این تنها یک عدد برمیگردونه که همونیه که من میخوام. اینطور هم میتونستم بنویسم:


SELECT
COUNT(someField)
FROM someTable
GROUP BY someField

که در اینصورت این نتایج بر میگشت:


3
2
1
1
1
.
.
.

همونطور که میبینی به ازاء bijan سه را برگردوند، برای babak دو را برگردوند و برای بقیه همش ۱ را برمیگردونه. حالا شما میتونی با استفاده از تابع mysql_num_rows که در PHP داریم بفهمی کلا چند تا رکورد unique داشتی. ممکنه بگی خب اولی که راحتتره، من میگم نه، دومی راحتتره و خیلی حرفه ای تر هم هست. کلا هیچوقت از DISTINCT استفاده نکن، هیچ نیازی بهش نیست.

در مورد XOOPS هم الان وقت صحبت ندارم متاسفانه، فقط بدون که به هیچ عنوان سیستم خوش دستی نیست، کدش خیلی کثیفه و ... تو انجمنها نمیشه وقتی یکی پست گذاشت بهت email بزنه و خیلی چیزهای دیگه، در یک کلام: سیستم نرمی نیست، اصلا و ابدا، این نظر منه، امید هم باهاش کار کرده، میتونه نظرات جالبی داشته باشه.

oxygenws
شنبه 17 اردیبهشت 1384, 09:10 صبح
بیژن جان،
1- یادت نره که اون کد روی سیستم خودش درست کار می کرده.
2- اون دو بخش مختلف "علی" در سمت where برای جستجو برای هر دو نوع "ی" و "ی" قرار داده شده. (که فکر کنم اینجا هر دو به یک شکل در اومدن)

baba
یک شنبه 18 اردیبهشت 1384, 11:38 صبح
سلام

اگر میشه این سیستمی که برای بیمارستان درست کردی رو بزارش

یا یک نمونه اوپن سورسش رو تویه اینترنت ادرسش رو بده

آخه عموم بیمارستان داره
براش یک سیستمی رو راه بیندازم

بابا-15 ساله

sirbijan
یک شنبه 18 اردیبهشت 1384, 18:32 عصر
سلام امید، چطوری؟

مگه اینکه اینجا ببینیمت! آره عزیزم، درسته که رو سیستمش کار میکرده، ولی همونطور که میدونی ممکنه ورژن چیزی که رو دستگاهش نصبه با رو سرور تفاوت داشته باشه و مثلا مال سرور استاندارد تر باشه. برای خودم این مساله پیش اومده که با کمی استاندارد نویسی تر کارم حل شده باشه. بابت اون ی ها هم ممنون، حدس زدم، ولی مطمئن نبودم،‌بنابر این پاکش کردم!

راستی دیشب فهمیدم سینا راحتی که از فامیلهای ماست با تو هم میچرخه! البته فامیل چندان نزدیک نیست، ولی بالاخره ...

parnian
سه شنبه 20 اردیبهشت 1384, 15:47 عصر
اره ورژن هاست بیشتر از ورژن local هست. erd ها رو هم متاسفانه نمی تونم اینجا بذارم شما در برنامتون چه استاندارد نویسی رو رعایت نکردید که این اتفاق افتاد؟

sirbijan
یک شنبه 25 اردیبهشت 1384, 00:50 صبح
پرنیان جان سلام، بازم عذر خواهی میکنم که دیر رسیدم. عزیزم من یادم نمیاد، برنامه یکی دو تا نبوده، ولی معمولا بعد از استفاده از DISTINCT همیشه پشیمون شدم! چیز بدردنخوریه، هر چند شاید مشکل شما با این هم حل نشه. بهر حال امیدوارم موفق باشی،‌اگر کار دیگه ای از دست من بربیاد خوشحال میشم کمک کنم.