جستجو در مطالب سایت با استفاده از MySQL Full-Text
جستجو در اطلاعات پایگاه داده را می توان جزء اولین و مهمترین نیازهای برنامه های تحت وب برشمرد که تقریبا هر برنامه نویسی در طی تجربه کاری خود با آن مواجه خواهد شد، در MySQL این جستجو از دو طریق میسر است، استفاده از دستور ساده LIKE و توابع Full-Text، دستور LIKE را در آموزش های مقدماتی به صورت جداگانه و مفصل توضیح داده ایم اما یکی از قابلیت های خوب MySQL که از نسخه 3.23 به بعد به آن اضافه شده، توابع Full-Text است که می تواند جهت کسب نتایج جستجوی سریع و تقریبا دقیق مورد استفاده قرار گیرد، هرچند برخی از قابلیت های Full-Text مربوط به کلمات انگلیسی است ولی توانایی آن برای کلمات فارسی آنقدر هست که بتوانیم بدون مشکل از آن استفاده کنیم و یا لااقل یکی از متدهای جستجو را بر مبنای آن قرار دهیم و در متدهای دیگر به فرض از LIKE استفاده نمائیم، در ادامه به توضیح اینکه چرا و چگونه از این قابلیت در کدهای PHP استفاده کنیم خواهیم پرداخت.
چرا باید از Full-Text به جای LIKE یا در کنار آن استفاده کنیم؟
واقعیت این است هر کدام از روش های بالا دارای معایب و محاسنی هستند، به عنوان مثال استفاده از دستور LIKE معمولا نتایج بیشتری را برمی گرداند، شیوه نگارش و استفاده از LIKE ساده تر و به اصطلاح دم دستی تر است اما در عوض ممکن است نتایجی نامربوط یا تکراری داشته باشیم، از طرفی جستجو با متد LIKE در پایگاه داده MySQL مخصوصا در مورد جداولی که محتوای زیادی دارند در مقایسه با Full-Text زمانبرتر است و پردازش کار در این حالت به طور معمول فشار بیشتری به سرور وارد می کند که این موضوع برای سرورهای با توان سخت افزاری پائین می تواند یک مشکل اساسی باشد، علاوه بر موارد گفته شده برخی قابلیت های Full-Text با دستور LIKE بدست نمی آیند که این به ماهیت متفاوت این دو روش برمی گردد.
ایجاد قابلیت Full-Text در جداول MySQL
قابلیت جستجوی Full-Text بر روی ستون هایی از نوع CHAR ,VARCHAR و TEXT و موتور MyISAM قابل اعمال است و هم زمان با ایجاد جدول یا بعد از آن نیز می توانیم به ستون مورد نظر آن را اضافه کنیم، به طور مثال در پرس و جوی نمونه زیر هم زمان با ساخت جدول، قابلیت جستجوی Full-Text را برای ستون فرضی title در نظر گرفته ایم:
CREATE TABLE post(
title VARCHAR(255),
FULLTEXT KEY title(title)) ENGINE=MyISAMهمان طور که اشاره شد می توانیم بعد از ساخت جدول و ستونها نیز جستجوی Full-Text را اضافه کنیم، برای افزودن این قابلیت بعد از ساختن جدول و ستونها، مقادیر SQL زیر را اجرا می کنیم:ALTER TABLE post ADD FULLTEXT(title);به این صورت این قابلیت به جدول و ستون موجود اضافه می شود.شیوه جستجو در Full-Text
شیوه جستجو در Full-Text بر اساس MATCH() ... AGAINST صورت می گیرد:
SELECT title FROM post
WHERE MATCH (title) AGAINST ('$searchword');برای جستجو از چند ستون در مقادیر MATCH می توانیم از کاما استفاده کنیم، همچنین می توان از قابلیت امتیاز دهی (score) این تابع نیز جهت چینش نتایج استفاده کرد:SELECT *, MATCH (title) AGAINST ('$searchword') AS score FROM post
WHERE MATCH (title) AGAINST ('$searchword') ORDER BY score ASCباید توجه کرد که Full-Text برای ایندکس کلمات محدودیت هایی اعمال می کند، از جمله اینکه اگر کلمه ای کمتر از 4 کاراکتر باشد ایندکس نمی شود، اگر کلمه ای در بیش از 50% ردیف ها تکرار شود ایندکس نمی شود، اگر کلمه ای در لیست Stopword ها باشد ایندکس نمی شود (البته این ویژگی مخصوص حروف انگلیسی است) و نهایتا اینکه برای شروع ایندکس کلمات برای جستجوی Full-Text نیاز به وجود حداقلی از اطلاعات در ردیف ها است.قابلیت های جستجو در Full-Text
قابلیت های دیگر این تابع جستجوی IN BOOLEAN MODE است که امکانات بیشتری در اختیارمان قرار می دهد (اضافه شده به MySQL از نسخه 4.0.1)، با استفاده از این قابلیت می توانید شمول ابتدا و انتهای یک کلمه را در جستجو تعیین کنید:
SELECT * FROM post WHERE MATCH (title) AGAINST ('+phpcode -htmlcode' IN BOOLEAN MODE);در مثال بالا اگر کاربر عبارت code را جستجو کند، تیترهای حاوی عبارت phpcode در جستجو خواهند آمد اما تیتر های حاوی عبارت htmlcode در لیست نتایج ظاهر نمی شوند، از ویژگی های جستجو در حالت BOOLEAN MODE نادیده گرفتن قانون 50% است.اما قابلیت Full-Text با امکان دیگری کامل می شود که Query Expansion نام دارد، همانطور که از معنی Expansion (توسعه) برمی آید نتایج جستجوی معمولی با Full-Text به دلیل اعمال محدودیت ها و سخت گیری در ایندکس کلمات و یا استفاده از Stopword ها، ممکن است بعضا دربرگیرنده همه نتایج نباشد، با افزودن Query Expansion حداقل به لحاظ تئوری می توانیم موارد معمولی تر را نیز در لیست جستجو نشان دهیم:
SELECT title FROM post
WHERE MATCH (title)
AGAINST ('$searchword' WITH QUERY EXPANSION);آموزش ساخت فرم عضویت در سایت با PHP و MySQL
ساخت فید آر اس اس (RSS Feed) با استفاده از PHP و MySQL
صفحه بندی مطالب و محتوا با PHP و MySQL
آموزش ساخت پنل ورود و خروج سایت با PHP و MySQL
ایجاد لینک دانلود مدت دار با PHP و MySQL
با mysql کار کردم اما الان گیج شدم :(
اونقدری که اینجا مشکلاتم حل شده تو کل گوگل نشده. تازه اونم به بهتریییییییییین روش ممکن و بدون سردرگمی. انشالله هرچی میخواین از خدا بهتون بده. دمتون گرررررررررم
به دلیل منقضی شدن mysql_query و از این دست دستورات از ورژن 5 به بعد در php لطفا آموزش استفاده از کلاس PDO رو بذارید.
با تشکر :)
بنظرتون چجوری وصل شم به پایگاه داده و نشون بدم تصویر و قیمت و نام محصول رو
توضیح بدین لطفا
http://stackoverflow.com/questions/2059891/php-get-list-of-all-filenames-contained-within-my-images-directoryhttp://stackoverflow.com/questions/8414746/get-filenames-of-images-in-a-directoryمتاسفانه توضیح این مطالب خود نیاز به آموزش های جداگانه دارد و در قالب یک پاسخ نمی توان تمام نکات را توضیح داد، در واقع شما باید تا حدودی با برنامه نویسی وب آشنا باشید!ببخشید من یه عکس تو دیتابیس ما اس کیو ال ذخیره کردم
چجوری اونو تو صفحه وب نشونش بدم
اگه اطلاعاتی دارید کمک کنین
مرسی
اما جهت اطلاعات بیشتر، نوع داده برای ذخیره تصاویر در MySQL نوع BLOB به معنی Binary Large OBject است که برای نمایش تصویر باید یک دستور header تنظیم کنید:
header("Content-type: image/jpeg");
echo $row['image_column'];توجه کنید که قبل از این دستورات هیچ خروجی نباید به مرورگر ارسال شود (شامل کاراکترهای نامرئی BOM نیز می شود)، روش دیگر نمایش، استفاده از data:image و base64_encode است:<?php echo '<img src="data:image/jpeg;base64,' . base64_encode($row['image_column']) . '">'; ?>من چجوری محتوای صفحه وب سایت رو با php درست کنم
لطفا توضیح بدین
یه مشکل دیگه هم دارم
قالب سایت رو طراحی کردم و تک تک قسمت هاشو مثل هدر و محتوا رو هم در مسیر سرور قرار دادم
ولی وقتی میرم قسمت لوکال هاست (local host) صفحه سایتم اجرا میشه ولی وقتی روی گزینه مثلا درباره ما کلیک میکنم خروجیش در صفحه دیگه ای نشون داده میشه
چیکار کنم خروجی در همون صفحه دیده بشه و نره یه صفحه دیگه
بی زحمت مفصل بگین
target="_blank"نباشند، در حالت معمول باید در همان صفحه جاری نمایش داده شوند، لذا این پارامتر را از تگ a حذف کنید! به طور مثال لینک از این حالت:<a href="webgoo.ir" target="_blank">باید به صورت زیر باشد:<a href="webgoo.ir">مرسی از سایت خوبتون
http://www.webreference.com/programming/php/search/index.htmlاین کدها رو کجا بنویسیم اجرا بشه؟؟؟؟؟؟؟؟؟
من نقشه سایت رو روی کاغذ کشیدم و کشیدم که سایت از کدوم بخشها تشکیل شده و چی میخوام بعدش چیکار کنم
با کدوم زبان برنامه نویسی و برنامه ای دیتابیسش رو بنویسم
تو رو خدا کمک کنید.
تو طراحی فروشگاه انلاین اول میان پایگاه داده رو ایجاد میکنند
یا قالب سایت و لینک ها و منو ها رو
و بعد وصلش میکنن به پایگاه داده
بی زحمت بگین
یه سوال دیگه داشتم
تورو خدا کامل توضیح بدین
چجوری میتونم پایگاده داده فروشگاه انلاین رو نوشت
با کدومش راحت تره
لطفا مراحلشو کامل توضیح بدین
تور خدا واسه پروژه لازم دارم خیلی ضروریه
یه سوال داشتم
من یه پایگاه داده asp دانلود کردم میشه بگین با کدوم برنامه بازش کنم و کد هاشو ببینم
مرسی
من یه فیلد دارم که tag ها رو میزارم داخلش.
منظور همون کلمات برجسته هر پست هست. حالا میخوام بر اساس این فیلد ها پست های مرتبط به هم رو پیدا کنم.
مثلن tag هام شامل "ایران-آلمان-آمریکا" باشه.
با فول تکست میشه پیدا کرد اما میخوام اولویت بدم بطوریکه مثلا پست هایی که هر سه کلمه ایران آمریگا و آلمان توشه اول بیاد بعد اون پست هایی که دو تا کلمه توشونن بعد تکی ها..
این کار اصلا آیا شدنی هست؟
من با html ظاهر یک جستجو را در صفحه سایتم ساختم که شامل لیبل و دکمه جستجو هست. اینم کدش:
<input type="submit" name="submit" value="جستجو" />بعد برنامه های بالا رو که آموزش دادید توی فایل search.php ریختم و با دستور <form action="search.php" method="POST"> در صفحه html فراخوانی کردم.وقتی روی دکمه جستجو می زنم یک صفحه جدید باز می شود که خودش شامل لیبل و دکمه search هست که وقتی کلمه ای را می نویسم و روی دکمه سرچ می زنم به صفحه Object not found! منتقل می شود.
یک سوال کلی: آیا کدهای بالا را باید در فایل php ذخیره کنیم و بعد در صفحه اصلی html فراخوانی کنیم؟؟؟
می خواهم برای دکمه جستجو که خودم ساختم این کدها اعمال شود چه جوری ؟؟؟؟
متشکرم..
- برای ایجاد امکان جستجو باید در یک قسمت فرم HTML داشته باشید که اطلاعات را به سرور (فایل PHP) ارسال کند، در فایل PHP اطلاعات ارسالی کاربر دریافت، پردازش و متناسب با هدف و نیاز، خروجی در مرورگر چاپ می شود (برای نمونه فرم جستجوی سایت را بررسی کنید!)، البته تعریف صحیح این فرآیند تنها با گذارندن مراحل مقدماتی تر و آشنایی با مواردی مانند LIKE در MySQL امکانپذیر است و پاسخ کوتاهی ندارد!
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.