我正在使用php和mysql。我有2张桌子:
CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`emails` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`phones` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`history` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`insert_date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=259 ;
INSERT INTO `mytable` (`id`, `emails`, `phones`, `history`, `insert_date`)
VALUES
(118, 'PLEASE SET', 'addr@yahoo.com', 'None','2015-01-13'),
(237, 'PLEASE SET', 'addr@yahoo.com', 'gomez', '2015-01-11');
和
CREATE TABLE IF NOT EXISTS `mytable2` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`history` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=259 ;
INSERT INTO `mytable2` (`id`, `history`)
VALUES
(1, 'bob',),
(2 , 'gomez');
做出选择后:
SELECT *
FROM `mytable1`
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)
我想在mytable2中找到记录子集,其记录字段与使用上述查询选择的历史记录字段相匹配。这基本上是基于历史字段的交叉点。我不确定如何在mysql中编写代码,特别是因为'相交'不存在。
答案 0 :(得分:2)
您可以使用简单的JOIN来完成这项工作:
SELECT
m1.*
FROM
mytable m1
INNER JOIN mytable2 m2
ON m1.history = m2.history
返回:
id emails phones history insert_date
237 PLEASE SET addr@yahoo.com gomez 2015-01-11
您问题中的查询将如下所示:
SELECT
m1.*
FROM
mytable m1
INNER JOIN mytable2 m2
ON m1.history = m2.history
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)
它正确地返回任何内容,因为唯一的合格记录的日期超过3天。
这是一个非常有用的信息图,将设置操作与SQL函数相关联
http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg
答案 1 :(得分:1)
答案 2 :(得分:1)
尝试使用 INNER JOIN 的两个表格中的history
等简单加入公共字段,并为其他条件添加 WHERE 条件。有关详细信息,请参阅Mysql {{3 }}
SELECT
m1.*
FROM
`mytable1` m1
INNER JOIN `mytable2` m2
ON m1.history = m2.history
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)
答案 3 :(得分:1)
尝试加入Mysql
SELECT tbl1.* FROM `mytable` tbl1 INNER JOIN `mytable2` tbl2 ON
tbl1.history = tbl2.history WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)