نمایش نتایج 1 تا 9 از 9

نام تاپیک: مشکل با ایجاد یک کوئری

  1. #1
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    مشکل با ایجاد یک کوئری

    سلام

    من 2 جدول پست و دسته دارم:

    در جدول پستها یک فیلد اختصاص دادم به دسته ها و آی دی دسته ها رو در صورتی که چند تا باشند با "," جدا می کنم و وارد جدول میکنم به این صورت:
    1,3,4,5

    بعضی پستها یک دسته برایش انتخاب شده است و بعضی پستها چند دسته. وقتی میخوام پستهایی رو با آی دی مثلا 4 نشان بدم به مشکل برمیخورم.

    کوئری هایی که امتحان کردم.

    SELECT * FROM `post` WHERE `post_category_id` = '$category_id'
    SELECT * FROM `post` WHERE `post_category_id` LIKE '%$category_id%'


    با دستور like هم امتحان کردم اما به درستی جواب نداد. به نظر شما برای نمایش پستهایی با یک دسته ی خاص، از چه کوئری استفاده کنم که به مشکل نخورم؟


    Example:

    Post Table:
    post_id,post_content,post_category_id

    Category Table:
    category_id,category_name


  2. #2
    کاربر دائمی آواتار king-net
    تاریخ عضویت
    اسفند 1389
    محل زندگی
    خونمون
    پست
    153

    نقل قول: مشکل با ایجاد یک کوئری

    اول دسته هات رو بگیر بریز تو یه آرایه بعد با explode جداشون کن و اون موقعه تطبیق بده

  3. #3

    نقل قول: مشکل با ایجاد یک کوئری

    میتونی موقع درج اطلاعات در فیلد دسته ها اونارو صورت کنی بعنی 1 ویرگول 2 بعد 3 بعد 4
    بعد اینجوری میفهمی پوزیشنش چنده
    تو sql ؟_؟_ ازین دستوراتم داریم که مثلا بگی چند کاراکتری باشه و کتاراکتر اول هرچی میخواد باشه د.ومی چیز خاص باشه و ووووووووووووووو

  4. #4
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    نقل قول: مشکل با ایجاد یک کوئری

    سلام

    نقل قول نوشته شده توسط king-net مشاهده تاپیک
    اول دسته هات رو بگیر بریز تو یه آرایه بعد با explode جداشون کن و اون موقعه تطبیق بده
    یک دسته بیشتر نیست.

    نقل قول نوشته شده توسط $ M 3 H R D A D $ مشاهده تاپیک
    میتونی موقع درج اطلاعات در فیلد دسته ها اونارو صورت کنی بعنی 1 ویرگول 2 بعد 3 بعد 4
    بعد اینجوری میفهمی پوزیشنش چنده
    تو sql ؟_؟_ ازین دستوراتم داریم که مثلا بگی چند کاراکتری باشه و کتاراکتر اول هرچی میخواد باشه د.ومی چیز خاص باشه و ووووووووووووووو
    میشه یه مثال بزنید؟

    ممکنه توی پست یه موضوع بیشتر انتخاب نشه و در یک پست 10 تا موضوع انتخاب بشه و معلوم نیست که این آی دی دسته ی خاص در کجا قرار خواهد گرفت؟ ممکنه یه بار اول باشه یه بار آخر یه بار وسط ...

    محتوای جدولمون مثلا اینطوری است:


    post_id post_content post_category_id
    1 "test text1" 1,3,4,7,8
    2 "test text2" 2,4,6
    3 "test text3" 5
    4 "test text4" 1,7,4,8
    5 "test text5" 5,7,4
    6 "test text6" 3


    حالا میخواهیم محتوای پستی که post_category_id = 4 را نشان بدهیم. باید به چه صورت کوئری بگیریم؟

  5. #5

    نقل قول: مشکل با ایجاد یک کوئری

    قبل و بعد از هر دسته را یک ویرگول بذار

    1           "test text1"            ,1,3,4,7,8,


    بعد با این دستور انخاب کن:

    SELECT * FROM `post` WHERE `post_category_id` like  '%,$category_id,%'


    تست کن ببین میشه.

    اگر نشد از عبارات منظم هم میتونی استفاده کنی ، خود mysql پردازش عبارات منظم را برای جستجو داره.

  6. #6

    نقل قول: مشکل با ایجاد یک کوئری

    اولا مشکل اصلی استفاده از لیستهای اینجوری همینی هست که بهش بر خوردید باید از جدوال واسط استفاده میکردید.
    در هر صورت از تابع FIND_IN_SET استفاده کنید
    SELECT * FROM `post` WHERE FIND_IN_SET('$category_id', post_category_id) > 0;

  7. #7
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    نقل قول: مشکل با ایجاد یک کوئری

    سلام

    بسیار ممنون از دوستان به خصوص جناب «امیـرحسین» عزیز، با دستور FIND_IN_SET مشکل حل شد.

    فقط یه سوال میشه یه مختصر توضیحی درباره جداول واسط بدهید؟

  8. #8

    نقل قول: مشکل با ایجاد یک کوئری

    مثلا سه تا جدول رو به شکل زیر میسازید و جدول سوم میشه واسطه جدولهای اول و دوم:
    posts: id, content
    categories: id, name
    posts_categories: post, category

    وقتی مثلا پست شماره 5 به دسته‌های شماره 9 و 10 تعلق داره دو تا سطر توی جدول posts_categories ثبت میکنید:
    posts  |  category
    ---------------------
    5 | 9
    5 | 10

    و موقع پیدا کردن پستهایی که عضو دسته‌ی خاصی هستند مشابه زیر عمل میکنیمک
    SELECT posts.* FROM posts_categories
    LEFT JOIN posts ON posts.id=posts_categories.post
    WHERE posts_categories.category='10'
    GROUP BY posts_categories.post

    و یا دسته‌های یک پست خاص:
    SELECT categories.* FROM posts_categories
    LEFT JOIN categories ON categories.id=posts_categories.category
    WHERE posts_categories.post='5'
    GROUP BY posts_categories.category;

    این روش که روش مرسوم هست بالاترین انعطاف رو برای این اهداف داره.

  9. #9
    کاربر دائمی آواتار maysam.m
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    تهران
    پست
    400

    نقل قول: مشکل با ایجاد یک کوئری

    فکر کنم بهتره ساختار جدولم رو تغییر بدم و از این روش استفاده کنم.
    ماشاا.. اطلاعات شما در سطح خیلی خوبیه
    واقعا ممنونم

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •