PDA

View Full Version : اسکریپت یاد آوری روز تولد دوستان در php



marys_farahani
جمعه 14 شهریور 1393, 11:52 صبح
سلام


برای سایتی که جداولش طراحی شده و قابل تغییر نیست

و فیلد تاریخش پر شده باشه به این شکل 13640101 => روز ماه سال به شمسی بهترین کوئری که میشه نوشت که متولید هر روز مشخص بشه چیه ؟:لبخند:

arash691
جمعه 14 شهریور 1393, 12:19 عصر
فکر کنم استخراج روز و ماه برات کافی باشه :


set @_birth_day := 13640101;
set @_month := substring(@_birth_day,5,2);
set @_day := substring(@_birth_day,7,2);
select @_month,@_day;

marys_farahani
جمعه 14 شهریور 1393, 12:40 عصر
فکر کنم استخراج روز و ماه برات کافی باشه :

set @_birth_day := 13640101;
set @_month := substring(@_birth_day,5,2);
set @_day := substring(@_birth_day,7,2);
select @_month,@_day;





مشکل اینکه فقط شما الان یه رشته تبدیل کردی اما من با یه آرایه طرفم و شما تصور کن 6 هزار تا رکورد ثبت شده هم داشته باشم


SELECT `id`, SUBSTRING(date_birth,5,4) as `birth` FROM date;

vahidqara
جمعه 14 شهریور 1393, 13:18 عصر
الان مشکل کجاست؟ مشکل اینه از قبل ثبت شده بدون قالب؟ یا یه کد بهینه برای جستجو؟:لبخندساده:

marys_farahani
جمعه 14 شهریور 1393, 13:21 عصر
الان مشکل کجاست؟ مشکل اینه از قبل ثبت شده بدون قالب؟ یا یه کد بهینه برای جستجو؟:لبخندساده:

دقیقا مشکل اینکه یه فکر اصولی نشده بوده موقع طراحی دیتابیس الان من باید هر روز بین 6 هزار تا رکورد بگردم و 4 رشته اخر جدا کنم بعد ببینم تا ماه و روز مورد نظرم یکی هست یا نع

میخوام ببینم اصولی ترین روش ممکنه برای این کار چیه

ایا میشه کل این پردازش ها رو سمت دیتابیس انجام داد [شکلک گل]

vahidqara
جمعه 14 شهریور 1393, 13:30 عصر
صد البته میشه پردازش ها رو سمت دیتابیس صورت بگیره.ولی به هر حال هر کوئری در این حد هزینه ی خودشو داره.

arash691
جمعه 14 شهریور 1393, 13:41 عصر
مشکل اینکه فقط شما الان یه رشته تبدیل کردی اما من با یه آرایه طرفم و شما تصور کن 6 هزار تا رکورد ثبت شده هم داشته باشم


SELECT `id`, SUBSTRING(date_birth,5,4) as `birth` FROM date;

من منظورم این نبود که داده ی شما فقط یک رشته هستش این فقط یک مثال بود برای بدست اوردن روز و ماه از پترن مورد نظر شما ، تازه MySQL قدرتش خیلی بیشتر از این حرفاس فکر نمی کنم واسه 6000 تا رکورد مشکلی بوجود بیاد ...

marys_farahani
جمعه 14 شهریور 1393, 13:57 عصر
صد البته میشه پردازش ها رو سمت دیتابیس صورت بگیره.ولی به هر حال هر کوئری در این حد هزینه ی خودشو داره.

هزینه اش چقدر میشه

marys_farahani
جمعه 14 شهریور 1393, 13:57 عصر
من منظورم این نبود که داده ی شما فقط یک رشته هستش این فقط یک مثال بود برای بدست اوردن روز و ماه از پترن مورد نظر شما ، تازه MySQL قدرتش خیلی بیشتر از این حرفاس فکر نمی کنم واسه 6000 تا رکورد مشکلی بوجود بیاد ...

به جواب رسیدم میزارم سایر دوستان هم استفاده کنن مرسی از شما

bagherok
جمعه 14 شهریور 1393, 14:08 عصر
تایپ فیلد تاریخ (به فرض اینکه اسمش B_Date باشه)رو به date تغییر بدید
و بعد این کوئری

$query="SELECT * FROM tabel WHERE MONTH(B_Date) = '$MONTH' AND DAY(B_Date) = '$day'";

bagherok
جمعه 14 شهریور 1393, 14:24 عصر
به جواب رسیدم میزارم سایر دوستان هم استفاده کنن مرسی از شما

مشکلتون با کد بالا حل نشد!

marys_farahani
جمعه 14 شهریور 1393, 14:52 عصر
تایپ فیلد تاریخ (به فرض اینکه اسمش B_Date باشه)رو به date تغییر بدید
و بعد این کوئری

$query="SELECT * FROM tabel WHERE MONTH(B_Date) = '$MONTH' AND DAY(B_Date) = '$day'";




ارور داشت
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL

این MONTH , DAY یه تابع است ؟

arash691
جمعه 14 شهریور 1393, 15:04 عصر
$query="SELECT * FROM tabel WHERE MONTH(B_Date) = '$MONTH' AND DAY(B_Date) = '$day'";

این روش زمانی جواب میده که ساختار بصورت 01-02-1364 باشه -_-

bagherok
جمعه 14 شهریور 1393, 15:08 عصر
بله http://www.w3resource.com/mysql/date-and-time-functions/mysql-month-function.php

واس من اروری نداشت

bagherok
جمعه 14 شهریور 1393, 15:10 عصر
$query="SELECT * FROM tabel WHERE MONTH(B_Date) = '$MONTH' AND DAY(B_Date) = '$day'";

این روش زمانی جواب میده که ساختار بصورت 01-02-1364 باشه -_-
خوب منم گفته بودم که ساختار رو تغییر بدند که اگه تایپ تاریخ از نوع text باشه و مقدارش برابر با 13640101 بعد از تغییر تایپ به date به اینصورت درمیاد 01-02-1364

arash691
جمعه 14 شهریور 1393, 15:13 عصر
درسته ... پس احتیاج به انجام یک کوئری برای تبدیل 13640201 به 01-02-1364 دارن :لبخند: ...

bagherok
جمعه 14 شهریور 1393, 15:16 عصر
درسته ... پس احتیاج به انجام یک کوئری برای تبدیل 13640201 به 01-02-1364 دارن :لبخند: ...

فقط لازمه تو mysql جدول مورد نظر رو انتخاب و بعد سربرگ structure و بعد تغییر تایپ تاریخ به date

bagherok
جمعه 14 شهریور 1393, 15:23 عصر
ارور داشت
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL



نوع تایپ فیلد تاریخ چی هست و
آیا به date تغیرش دادیدکه
ارور داد!!!

marys_farahani
جمعه 14 شهریور 1393, 16:04 عصر
نوع تایپ فیلد تاریخ چی هست و
آیا به date تغیرش دادیدکه
ارور داد!!!



بله نوع تایپ ستون عوض کردم خیلی ممنون کمک خوبی بود :لبخند: