تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل between در جستو جو
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام و عرض ادب و احترام
خواهشا به عکسی که میفرستم یه نگاه بندازین
این عکس دیتابیس من هستش .
به این شرط هم یه نگاه بندازین

`mine_id`='$id' and `time_time` between '1396/7/18' and '1396/8/20'

من وقتی این کد رو مینویسم ردیف هایی رو برمیگردونه ولی وقتی کد پایین رو مینویسم چیزی بر نمیگردونه


`mine_id`='$id' and `time_time` between '1396/1/11' and '1396/11/11'

خودم دقیقا نمیدون که چرا این کد اجرا نمیشه .
آیا این احتمال وجود دار ه که چون بازه تاریخ های من در دیتابیس بین برج 7 و 8 هستش اجرا نمیشه .
به نظرتون مشکل اصلی کجاست ؟

مرسی
ممنون
الآن به این شرط پایین نگاه کنین
چرا این کار نمیکنه

`time_time` between '1396/1/3' and '1396/12/20'

مشکل از کجاست ؟
شما چه راه حلی رو پیشنهاد میکنین ؟
من میخوام رکورد هایی که بازه زمانیش بین اینا هستش رو برگردونه .
ممنون
سلام و عرض ادب
الان به این عکس نگلاه کنین
نوع فیلد من varchar هستش .
به نظرتون اینو عوض کنم و چی بزارم کار میکنه
به نظرتون مشکل میتونه از نوع فیلد باشه یا ربطی نداره؟
چه نوعی بزارم تا کار کنه ؟
مرسی
به این آدرس برین
https://www.w3schools.com/sql/sql_between.asp
تو اینجا گفته که میشه از between برای تاریخ استفاده کرد


SELECT * FROM Orders WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;


اینم نمونه کدش .
برای اینکار نوع فیلدم رو چی بزارم
عذر میخوام زیاد سوال پرسیدم

برای جست و جوی بازه زمانی به غیر از between از چه چیزهای دیگه ای میشه استفاده کرد
از دوستان کسی چنین پروژه ای داشته .
تاریخ شمسی رو نمیتونین جستجو با BETWEEN انجام بدین. باید میلادی باشه. بهترین راه اینه که همیشه توی دیتابیس برای نگهداری زمان و تاریخ از نوع INT استفاده کنین و Timestamp که با PHP میگیرین رو توی دیتابیس نگهداری کنین. موقع مقایسه هم کافیه که تاریخ‌های موردنظرتون رو به Timestamp (با کمک کتابخانه‌ی JDF و توابعی مثل jmktime) تبدیل کنین و مقایسه رو با اعداد انجام بدین. ضمناً برای اینکه روز نهایی هم درنظر گرفته بشه، باید 86400 ثانیه بهش اضافه کنین تا موقع مقایسه، تا پایان روز آخر (ثانیه‌ی آخرش) محاسبه بشه. برای مثال:
require_once 'jdf.php';

$start = jmktime(0, 0, 0, 10, 7, 1396);
$end = jmktime(0, 0, 0, 10, 30, 1396) + 86400;
$sql = "SELECT * FROM `Orders` WHERE (`OrderDate` BETWEEN '{$start}' AND '{$end}');";