با عرض سلام خدمت همه دوستان
ما توی یکی از ستون های جدول mysql ، یک ستونی به نام ورژن داریم که داخلش فایل هامون رو بصورت float ورژن بندی کردیم
مثلا
1.0001
1.0002
1.0003
حالا زمانی که میخوایم بهmysql بگیم که برو version>1.002 بردار بیار ، کل جدول ها رو میاره ، امکانش هست راهنمایی کنید که چجوری من میتونم مشکلم رو حل کنم
با تشکر
سلام مهران جان
خب کوئریتون مشکل داره دیگه یقینا، کوئریتو بفرست ببینم چی داری میزنی که بتونیم صحیحش رو بدیم بهت
همچنین اگه میخوای دقیقتر کمک کنم، یه شات از تیبلت هم بده
من الان نمیدونم چه فیلد یونیکی داری...
اگه کالمن ورژنتون یونیکه، چطوری ممکنه که شما دقیقا توی کوئری بگی فلان ورژن میخوام و به جای فایلهای متعلق به اون ورژن، مابقیه موارد رو بیاره؟
یا کوئریو بد میزنین، یا استراکچر رو بد نوشتین، یا ریلیشنهارو بد دادین ک این گزینه کمتر ارتباط دارع با مشکلت...
بیشتر اطلاعات بده ک بهتر کمک کنم بهت
سلام خدمت شما.
در ابتدا بابت تاخیر پوزش میخوام، تازه از محل کار برگشتم.
الان که دقت کردم میبینم مشکل شما یکم ریشهایتره. حالا این که چرا این همه اعشار زدید، کاملا بستگی به پروژتون داره و شاید نیازه، اما وقتی با تعداد بالایی اعشار قراره همچین چیزی رو مقایسه کنید، گاهی sql دچار خطا میشه که دلیلش یکم خارج از بحث ماست.
درکل باید بدونید که float ها با دقت بسیار بالایی محاسبه نمیشن و توی اعداد خیلی کوچیک دچار خطا میشن گاهی. درحقیقت مشکل در محاسبه نیست، مشکل در ذخیرهسازیه اولیهست. یعنی ممکنه به شکل زیر ذخیره بشن
float 1.0002 // 1.0002
float 1.0001 // 1.00010000001
در این صورت، باز هم عدد ۱.۰۰۰۱۰۰۰۰۰۰۱، بیشتر از ۱.۰۰۰۱ به حساب میاد. برای همینه که توی کوئری برش میگردونه برات. اینم مثالش بود که درک کنی موضوعو...
راه حلی که به فکر من میرسه، سینتکسیه که توسط cast و decimal بیای بگی مثلا اعدادی که بهت میدم رو تا ۵ رقمه اعشار محاسبشون کن فقط. اینطوری دیگه اگر موقع ذخیره سازی با خطای جزئی هم دادههای float ذخیره شده باشن، توی محاسبه دقیق برمیگردن. این کد رو امتحان کن اگر مشکلی داشتی بگو باز:
SELECT * FROM `table` WHERE CAST(version AS DECIMAL(10, 5)) > 1.0001
ایامت به کام
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟