3 tablo oluşturdum imei, post ve view. Tüm 3 masada 1000 kayıt var. Şimdi b/m sorgusunu çalıştırdığımda, cevap vermesi çok uzun sürüyor.MySQL Sub Query, yanıt vermek için uzun zaman alıyor
Tablo tasarım & örnek veriler aşağıda verilmektedir:
CREATE TABLE IF NOT EXISTS `imei` (
`imei_id` int(5) NOT NULL AUTO_INCREMENT,
`imei_no` varchar(30) NOT NULL,
`imei_net` varchar(30) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`imei_id`),
UNIQUE KEY `imei_no` (`imei_no`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1346 ;
CREATE TABLE IF NOT EXISTS `post` (
`post_id` int(5) NOT NULL AUTO_INCREMENT,
`post_title` varchar(60) NOT NULL,
`post_desc` varchar(500) NOT NULL,
`post_author` varchar(30) NOT NULL DEFAULT 'Admin',
`user_id` int(10) NOT NULL DEFAULT '1',
`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=876 ;
CREATE TABLE IF NOT EXISTS `view` (
`view_id` int(5) NOT NULL AUTO_INCREMENT,
`post_id` int(11) NOT NULL,
`imei_id` varchar(30) NOT NULL,
`status` varchar(10) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`view_id`),
UNIQUE KEY `imei_id` (`imei_id`,`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13706 ;
Değerler tablo içinde:
IMEI:
INSERT INTO `imei` (`imei_id`, `imei_no`, `imei_net`, `date`) VALUES
(1, '123456789', 'Airtel', '2015-08-06 07:39:47'),
(2, '23456789', 'Aircel', '2015-08-06 06:08:33')
SONRASI:
INSERT INTO `post` (`post_id`, `post_title`, `post_desc`, `post_author`, `user_id`, `date`) VALUES
(1, 'NSC Rate Down', 'NSC rates are getting down from today', 'Admin', 1, '2015-07-08 05:29:54'),
(2, 'NCDEX offers cashback', 'NCDEX offers cashback for the previous users', 'Admin', 1, '2015-07-08 05:30:01')
GÖRÜNÜM:
INSERT INTO `view` (`view_id`, `post_id`, `imei_id`, `status`, `date`) VALUES
(1, 1, '1', '1', '2015-08-08 05:04:38'),
(7, 2, '1', '1', '2015-08-08 07:55:25')
Sorgu Yürütme:
SELECT
*
FROM
(
SELECT
i.imei_id,
i.imei_no,
p.post_id,
p.post_title,
p.post_desc,
p.date,
1 AS STATUS
FROM
imei i,
post p,
VIEW v
WHERE
i.imei_id = v.imei_id
AND p.post_id = v.post_id
AND i.imei_no = 356554064098771
UNION
SELECT
i.imei_id,
i.imei_no,
p.post_id,
p.post_title,
p.post_desc,
p.date,
0 AS STATUS
FROM
imei i,
post p
WHERE
i.imei_no = 356554064098771
AND p.post_id NOT IN (
SELECT
v.post_id
FROM
imei i,
post p,
VIEW v
WHERE
p.post_id = v.post_id
AND v.imei_id = (
SELECT
i.imei_id
FROM
imei i
WHERE
imei_no = 356554064098771
)
)
) AS temp
WHERE
date >= DATE_SUB(
(
SELECT
date
FROM
imei
WHERE
imei_no = 356554064098771
),
INTERVAL 1 WEEK
)
ORDER BY
date DESC
Sonuç olarak ne bekliyorsunuz? – mitkosoft
Pls de açıklamanın sonuçlarını içerir. – Shadow
Uygun sonuç alıyorum, ancak "değil" durumunu kullanırken daha fazla zaman alır. Alternatif bir çözüme ihtiyacım var – Lijibals