View Full Version : مبتدی: اضافه کردن برچسب به مطالب
saeed_mu
دوشنبه 14 مرداد 1392, 20:40 عصر
سلام.
اگر میشه یه توضیحی بدین که چطور با استفاده از php میشه به مطالب برچسب اضافه کرد که با کلیک بر روی برچسب هر مطلب کلیه مطالبی که آن ها هم دارای این برچسب هستند رو نمایش بده.
اگر با یک مثال توضیح بدید ممنون میشم.
tadayoni
دوشنبه 14 مرداد 1392, 21:47 عصر
باید برچسب های خودتون رو توی پایگاه داده ذخیره کنید و مطالب رو هم توی جدول دیگه ای ذخیره کنید . میان این دو جدول یک جدول دیگه باید قرار بدید که ارتباط بین مطالب و تگ ها رو با id اونها مشخص کنه . موقع جستجو هم فقط کافیه نگاه کنید به جدول میانی و ببینید که کدوم مطالب دارای اون کد تگ هستند
azamicu
دوشنبه 14 مرداد 1392, 21:55 عصر
دوست عزیز اگه از ترکیبی js , ajax , php رو انجام بدی خیلی بیشتر موفق میشی به این صورت که
با js وقتی یک نوع انتخاب شد id یا key اونو با ajax یا json به سرور بفرست و پردازش سروری روش انجام بده و داده هایی که میخوای رو با یک object یا map برگردون و نمایش بده
saeed_mu
دوشنبه 14 مرداد 1392, 22:06 عصر
باید برچسب های خودتون رو توی پایگاه داده ذخیره کنید و مطالب رو هم توی جدول دیگه ای ذخیره کنید . میان این دو جدول یک جدول دیگه باید قرار بدید که ارتباط بین مطالب و تگ ها رو با id اونها مشخص کنه . موقع جستجو هم فقط کافیه نگاه کنید به جدول میانی و ببینید که کدوم مطالب دارای اون کد تگ هستند
ممنون از توضیحاتون. من هنوز مبتدی هستم و آغاز راه. من در اتصال این دو به هم مشکل دارم. اگر امکان داره mysql_query رو در هنگام فراخوانی از پایگاه داده ها برام بنویسید و یک سوال دیگه هم اینکه مثلا من برای یک پست چند تگ مینویسم که اون ها رو با کاما از هم جدا کرده ام حالا چطور باید اون ها رو تک تک کرد که در جدول تگ ها ذخیره بشن؟
بهزاد علی محمدزاده
دوشنبه 14 مرداد 1392, 22:40 عصر
سلام . می دونید که تاپیک و توی بخش طراحی وب ایجاد کردین و باید در بخش PHP ایجاد می کردین . اما در مورد سوالتون , چیزی که می خواید جنبه آموزشی داره . و براش باید طراحی جدوال رو بدونید , کوئری نویسی رو بدونید , زبان PHP رو هم بلد باشید . حالا فرضا در یه جایی به یکی از این سوالات پاسخ داده بشه , با بقیه اش چه میشه کرد ؟ شما باید برید و اینها رو یادبگیری با سوال پرسیدن نمیشه پیش برید. ممکنه در یه پروژه حتی تمرین صد ها کوئری بنویسید , خب چند تا رو با سوال میشه انجام داد ؟
اما : میشه یه جدول در نظر گرفت برای Tag و یه جدول هم دارید برای Post اونوقت بین این دوتا جدول رابطه ایی دارید به نام PostTag که میگه مثلا pos1 تگ tag1 رو داره و همچنین post1 تگ tag2 رو هم داره و ... اینجوری می تونید کوئری بزنید post1 چه تگ هایی داره ؟ یا tag1 چه پست هایی رو شامل شده .
saeed_mu
دوشنبه 14 مرداد 1392, 22:55 عصر
سلام . می دونید که تاپیک و توی بخش طراحی وب ایجاد کردین و باید در بخش PHP ایجاد می کردین . اما در مورد سوالتون , چیزی که می خواید جنبه آموزشی داره . و براش باید طراحی جدوال رو بدونید , کوئری نویسی رو بدونید , زبان PHP رو هم بلد باشید . حالا فرضا در یه جایی به یکی از این سوالات پاسخ داده بشه , با بقیه اش چه میشه کرد ؟ شما باید برید و اینها رو یادبگیری با سوال پرسیدن نمیشه پیش برید. ممکنه در یه پروژه حتی تمرین صد ها کوئری بنویسید , خب چند تا رو با سوال میشه انجام داد ؟
اما : میشه یه جدول در نظر گرفت برای Tag و یه جدول هم دارید برای Post اونوقت بین این دوتا جدول رابطه ایی دارید به نام PostTag که میگه مثلا pos1 تگ tag1 رو داره و همچنین post1 تگ tag2 رو هم داره و ... اینجوری می تونید کوئری بزنید post1 چه تگ هایی داره ؟ یا tag1 چه پست هایی رو شامل شده .
بخش php رو متاسفانه نتونستم پیدا کنم اگر اینجا مشکلی هست از مدیران میخوام که تاپیک رو منتقل کنند.
من اینایی که گفتین رو تقریبا بلد هستم. اگر توجه کرده بودید من هنوز مبتدی هستم و فقط یه راهنمایی از دوستان خواستم.
بهزاد علی محمدزاده
دوشنبه 14 مرداد 1392, 23:05 عصر
اون دو خط توضیح آخر من کافی بود ؟ متوجه منظورم شدی ؟
saeed_mu
چهارشنبه 16 مرداد 1392, 14:12 عصر
من متوجه نشدم که حتما باید 3 تا جدول داشته باشم یا با 2 تا جدول هم میشه نوشتش؟
tadayoni
چهارشنبه 16 مرداد 1392, 16:40 عصر
اما : میشه یه جدول در نظر گرفت برای Tag و یه جدول هم دارید برای Post اونوقت بین این دوتا جدول رابطه ایی دارید به نام PostTag که میگه مثلا pos1 تگ tag1 رو داره و همچنین post1 تگ tag2 رو هم داره و ... اینجوری می تونید کوئری بزنید post1 چه تگ هایی داره ؟ یا tag1 چه پست هایی رو شامل شده .
رابطه ای که بین این دو جدول برقرار میشه توسط همون جدول سومی هست که بین این دو جدول هستش
اگه خواستید فیلدها رو براتون به همراه کوئری مینویسم
ولی همونطور که دوستمون گفتند باید پایه ای یاد بگرید دوست عزیز
saeed_mu
چهارشنبه 16 مرداد 1392, 17:19 عصر
رابطه ای که بین این دو جدول برقرار میشه توسط همون جدول سومی هست که بین این دو جدول هستش
اگه خواستید فیلدها رو براتون به همراه کوئری مینویسم
ولی همونطور که دوستمون گفتند باید پایه ای یاد بگرید دوست عزیز
منم سعیم اینه که یاد بگیرم. نمیشه دو تا جدول داشت یکی پست و یکی تگ و در جدول تگ یک فیلد اضافه کرد که id پست ها توش ذخیره بشن؟ یا حتما باید با 3 جدول باشه؟
ممنون میشم اگر بنویسید برام.
بهزاد علی محمدزاده
چهارشنبه 16 مرداد 1392, 18:46 عصر
اینهایی که میگم و با SQL Server انجام دادم می تونی همین و توی MySQL پیاده سازی کنی :
108702
دلیل اینکه سه تا جدول داریم این هست که می خوایم بگیم . پست شماره یک هم تگ شماره یک رو داره و هم تگ شماره دو رو داره . با این طراحی ما یه جدول داریم که Tag رو نگهداری می کنه و ما Tagهای مورد نظر رو وارد این جدول می کنیم . بعد وقتی می خوایم یه پست ارسال کنیم . می گیم این Post این Tagها رو داره . ( شاید با تیک زدن و هر روش دیگه ایی ... )
108703108704
جدول PostTag واسط بین این دوتا جدول هست . می خوایم بگیم محتوی شماره یک هم برای برنامه نویسی تگ خورده و هم برای پایگاه داده . محتوی شماره دو فقط پایگاه داده است . محتوی شماره سه فقط برنامه نویسی .
108705
اینجوری هم میشه ازش پرس و جو گرفت : تمام پست هایی که تگ برنامه نویسی خورد رو به من بده :
SELECT P.Content
FROM Post AS P
INNER JOIN PostTag AS PT
ON P.PostId = PT.PostId
INNER JOIN Tag AS T
ON PT.TagId = T.TagId
WHERE T.TagId = 1
108706
می خوام ببینم پست شماره یک من چه تگ هایی خورده :
SELECT T.Name
FROM Post AS P
INNER JOIN PostTag AS PT
ON P.PostId = PT.PostId
INNER JOIN Tag AS T
ON PT.TagId = T.TagId
WHERE P.PostId = 1
بهزاد علی محمدزاده
چهارشنبه 16 مرداد 1392, 18:48 عصر
108707
این هم خروجی پرس و جوی آخر . ( لطفا یکی این پست رو منتقل کنه به بخش پایگاه داده )
tadayoni
چهارشنبه 16 مرداد 1392, 19:37 عصر
منم سعیم اینه که یاد بگیرم. نمیشه دو تا جدول داشت یکی پست و یکی تگ و در جدول تگ یک فیلد اضافه کرد که id پست ها توش ذخیره بشن؟ یا حتما باید با 3 جدول باشه؟
ممنون میشم اگر بنویسید برام.
میشه اینکارو کرد ولی نتیجه ای که تو میخوای رو نمیده . یعنی اونوقت باید هر بار با توجه به هر تگ ، یک مطلب ذخیره کنی و برعکس که اصلا روش درستی نیست
saeed_mu
پنج شنبه 17 مرداد 1392, 01:40 صبح
108707
این هم خروجی پرس و جوی آخر . ( لطفا یکی این پست رو منتقل کنه به بخش پایگاه داده )
خیلی ممنون. تقریبا حل شد. فقط یه تابعی باید نوشت که اگر تگی تکراری نوشتم اون تگ دوباره ذخیره نشه در پایگاه و فقط آی دی اون تگ که در پایگاه وجود داره رو در جدول posttag سیو کنه.
مثلا پست شماره یک شامل تگ های 1 و 2 هست. و پست شماره 3 شامل تگ ها 3 و 4 و 2 که تگ شماره 2 تکرار میشه من میخوام که تگ شماره 2 دوباره ذخیره نشه. اینو تابع رو متاسفانه هرکاری کردم نتونسم بنویسم. اگر میشه یک کمکی هم برا نوشتنش بکنید با تشکر.
بهزاد علی محمدزاده
پنج شنبه 17 مرداد 1392, 10:37 صبح
نه نیازی نیست همچین کاری انجام بدی . شما گفته بودی که میشه اینها رو توی دوتا جدول داشته باشیم یا نه ؟ خودت توی یه برنامه word تو جدول و شبیه سازی کن . بعد داده بهشون بده ببین چه اتفاقی میوفته . توی جدول Tag باید بگی : ( تگ شماره 1, پست شمار1 , برنامه نویسی ), ( تگ شماره 2, پست شمار1 , پایگاه داده ),( تگ شماره 3, پست شمار2 , برنامه نویسی ) و ...
می بینی که برنامه نویسی دوباره تکرار میشه . اینجور طراحی رو میگن غیر نرمال . مشکلات زیادی داره , یکیش تکرار اطلاعات هست . اگر این یه جدول با داده های بیشتر باشه تکرار اطلاعات خیلی زیادی رو به همراه داره . مشکلات بعدی : اگر مثلا املای برنامه نویسی رو اشتباه وارد کرده باشی ( ترنامه نویسی ) اونوقت بخوای ویرایشش کنی باید بری و همه رو ویرایش کنی ؟!
در نتیجه جدول رو مثل مثال خودمون میشکنن به دو تا جدول . جدول PostTag میشه رابط بین جدول Post و جدول Tag . اینجوری مشکلات بالا رو دیگه نداریم , آپدیت ها به خوبی انجام میشه . ولی شما به یه تکرار اطلاعات رسیدی که می خوای اون نباشه .
در این حالت که بهش میگن طراحی نرمال شده ( نرمالسازی ) . ما تکرار اطلاعات داریم , ( افزونگی ) اما این تکرار اطلاعات قابل قبول هست . ( افزونگی قابل قبول ) ... و ما این و می پذیرم . اگر با حالت غیر نرمال مقایسه کنی می بینی که فقط یه عدد داره تکرار میشه . نه رکوردهایی از اطلاعات تکراری .
پس نیازی نیست همچین تابعی بنویسی .
saeed_mu
پنج شنبه 17 مرداد 1392, 15:03 عصر
نه نیازی نیست همچین کاری انجام بدی . شما گفته بودی که میشه اینها رو توی دوتا جدول داشته باشیم یا نه ؟ خودت توی یه برنامه word تو جدول و شبیه سازی کن . بعد داده بهشون بده ببین چه اتفاقی میوفته . توی جدول Tag باید بگی : ( تگ شماره 1, پست شمار1 , برنامه نویسی ), ( تگ شماره 2, پست شمار1 , پایگاه داده ),( تگ شماره 3, پست شمار2 , برنامه نویسی ) و ...
می بینی که برنامه نویسی دوباره تکرار میشه . اینجور طراحی رو میگن غیر نرمال . مشکلات زیادی داره , یکیش تکرار اطلاعات هست . اگر این یه جدول با داده های بیشتر باشه تکرار اطلاعات خیلی زیادی رو به همراه داره . مشکلات بعدی : اگر مثلا املای برنامه نویسی رو اشتباه وارد کرده باشی ( ترنامه نویسی ) اونوقت بخوای ویرایشش کنی باید بری و همه رو ویرایش کنی ؟!
در نتیجه جدول رو مثل مثال خودمون میشکنن به دو تا جدول . جدول PostTag میشه رابط بین جدول Post و جدول Tag . اینجوری مشکلات بالا رو دیگه نداریم , آپدیت ها به خوبی انجام میشه . ولی شما به یه تکرار اطلاعات رسیدی که می خوای اون نباشه .
در این حالت که بهش میگن طراحی نرمال شده ( نرمالسازی ) . ما تکرار اطلاعات داریم , ( افزونگی ) اما این تکرار اطلاعات قابل قبول هست . ( افزونگی قابل قبول ) ... و ما این و می پذیرم . اگر با حالت غیر نرمال مقایسه کنی می بینی که فقط یه عدد داره تکرار میشه . نه رکوردهایی از اطلاعات تکراری .
پس نیازی نیست همچین تابعی بنویسی .
من هم الان دارم از 3 جدول استفاده می کنم. منتهی مشکل من در سیو کردن تگ ها در پایگاه هست. من از طریق خود فرم ارسال مطالب تگ ها رو هم ارسال میکنم.
مثلا برای پست شماره 1 مینویسم تگ1,تگ2,تگ3 و به همراه مطلب که در پایگاه ذخیره میشه تگ ها رو دونه دونه در جدول تگ ها و آی دی تگ ها و مطلب ارسالی رو در جدول Post-Tag ذخیره می کنم.
من از این روش استفاه می کنم که که به خوبی کار میکنه ولی همون مشکلی که در بالا نوشتم وجود داره. یعنی اگر مثلا در پست شماره 3 هم تگ2 رو بنویسم این تگ دوباره در جدول تگ ها سیو میشه. برای همین من یک تابعی خواستم که تگ هایی که از طریق پست ارسال میکنم رو دونه دونه با تمام تگ هایی که در جدول تگ هست مقایسه کنه که اگر تکراری هستند دیگه اون تگ ذخیره نشه و فقط آی دی تگی که در جدول تگ هست و با تگ پستی مطابقت کرد رو به همراه آدی پست در جدول Post-Tag ذخیره کنه.
آیا از روش دیگه ای میشه استفاده کرد؟
r4hgozar
پنج شنبه 17 مرداد 1392, 15:51 عصر
به نظرم تو تالار Php و یا asp بگی نتیجه بهتری بگیری دوست عزیز
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.