PDA

View Full Version : درخواست query



iranme
شنبه 07 دی 1392, 11:48 صبح
درود،
من دو تا جدول دارم با اطلاعات زیر:

CREATE TABLE IF NOT EXISTS `outcomedrug` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`patientid` int(11) NOT NULL,
`asdate` date NOT NULL,
`todate` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=4;

--
-- Dumping data for table `outcomedrug`
--

INSERT INTO `outcomedrug` (`id`, `patientid`, `asdate`, `todate`) VALUES
(1, 2, '2013-12-23', '2013-12-23'),
(2, 2, '2013-12-24', '2013-12-27'),
(3, 1, '2013-12-21', '2013-12-27'),
(4, 2, '2013-12-26', '2013-12-30');


CREATE TABLE IF NOT EXISTS `patient` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) COLLATE utf8_persian_ci NOT NULL,
`surname` varchar(200) COLLATE utf8_persian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=3 ;

--
-- Dumping data for table `patient`
--

INSERT INTO `patient` (`id`, `name`, `surname`) VALUES
(1, 'اصغر', 'اصغری'),
(2, 'بابک', 'بابکی');


حالا میخوام یک کوئری بگیرم که نام و نام خانوادگی فردی که مقدار asdate اش برابر با تاریخ امروز بود را فقط نشان بدهد و اگر بعد از تاریخ امروز دوباره در آینده تاریخ داشته باشد را نشان ندهد.
یعنی در مثال بالا میخوام اصغر اصغری نشان داده بشود (با فرض اینکه تاریخ امروز برابر 2013-12-27 باشد) ولی بابک بابکی نشان داده نشه.

من از کوئری زیر استفاده میکنم تاریخ را درست نشان میده (فقط امروز) ولی همه کسانی که تاریخ امروز را دارند را نشان میده.

SELECT outcomedrug.patientid, outcomedrug.todate, patient.id, patient.name, patient.surname FROM outcomedrug JOIN patient ON outcomedrug.patientid = patient.id WHERE outcomedrug.todate = '2013-12-27' GROUP BY (patient.id) ORDER BY patient.name DESC

ممنون میشم من را راهنمائی کنید.

espootin
یک شنبه 08 دی 1392, 22:18 عصر
با سلام
اینطور که من متوجه شدم ، باید با این کوری به جواب مد نظرتون برسید:


SELECT o.patientid, o.todate, p.id, p.name, p.surname
FROM patient AS p
INNER JOIN outcomedrug AS o
ON p.`id`= o.patientid AND o.asdate='2013-12-21' AND p.`name`='اصغر'


موفق باشید.

iranme
چهارشنبه 11 دی 1392, 22:23 عصر
ممنون ولی شما نام فرد را دخیل کردید. در صورتی که من هدفم بدست آوردن نام افراد است. این دو تا اسم که من آوردم در واقع نمونه بود شاید 10-20 نفر در روز باشند که تاریخشان امروز باشد.

کسی جوابی ندارد واسه این سوال؟

espootin
چهارشنبه 11 دی 1392, 22:30 عصر
این چیزی بود که من از توضیحات شما برداشت کردم ، در صورت تمایل بیشتر توضیح دهید که چه خروجی می خواهید.

iranme
پنج شنبه 12 دی 1392, 00:12 صبح
من که کامل توضیح دادم!
من میخوام تمام افرادی که امروز تاریخ حضورشون (todate == today) هست نشان داده بشه ولی اگر مثلا به جای امروز، دیروز مراجعه کرده (asdate == yesterday) و در سیستم ثبت شده که تا هفته دیگه مراجعه مراجعه نکند (todate > today) دیگه جزو مراجعین امروز نشان داده نشه. (مانند بابک بابکی که هم todate اش 27 ام هست و هم 30 ام).
بازم اگه گنگ بود بگید که کامل تر توضیح بدم.

espootin
پنج شنبه 12 دی 1392, 00:19 صبح
جستجو براساس تاریخ امروز:


SELECT o.patientid, o.todate, p.id, p.name, p.surname
FROM patient AS p
INNER JOIN outcomedrug AS o
ON p.`id`= o.patientid AND o.todate ='2013-12-21'

iranme
پنج شنبه 12 دی 1392, 00:23 صبح
شما خودت این کوئری را تست کردی؟
اینجا اسم بابک بابکی را هم دوباره میاره! چون todate آن هم در آن تاریخ هست!

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

espootin
پنج شنبه 12 دی 1392, 00:52 صبح
بازم کاملا متوجه نشدم چی رو می خوای ولی این برداشت و اینم کوریش:
تمام بیمار هایی که تاریخ امروز مراجعه دارند رو بجز اون بیمارهایی که در تاریخ های جلوتر نیز مراجعه دارند را نمایش بده.
بدین صورت که میاد با تاریخ امروز چک می کند، سپس تاریخ بعد از امروز رو نیز چک می کند و اگر اون بیمار در آینده مراجعه ای نداشت نمایش می دهد.


SELECT o.patientid, o.todate, p.id, p.name, p.surname
FROM patient AS p
INNER JOIN outcomedrug AS o
ON p.`id`= o.patientid AND o.todate ='2013-12-27' AND o.`patientid` NOT IN(SELECT o.patientid
FROM patient AS p
INNER JOIN outcomedrug AS o
ON p.`id`= o.patientid AND o.todate >'2013-12-27')


asdate چی بود!! اگه به جواب نرسیدی، یه توضیح مختصر در مورد این فیلد ها هم بده.

iranme
پنج شنبه 12 دی 1392, 11:48 صبح
دمت گرم الان دقیقا چیزی شد که میخواستم.
خیلی لطف کردی، ممنون