作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在进行一个项目,该项目有点失控(就组织良好和深思熟虑而言),因为它开始时规模很小,但发展得很快。
无论如何,我们有一个系统可以跟踪用户事件,记录 UUIDS 以及特定的联系事件,我们用它来生成有关客户在网站上查看的内容的信息。相当标准。不管怎样,它变得有点复杂和缓慢,我希望得到一些帮助来优化查询。
我确信有比我目前使用的更好的方法(也许使用 JOINS)来做到这一点,但我似乎无法理解它。一些帮助将不胜感激。相关信息如下。
谢谢。
表:visitor_activity
CREATE TABLE `visitor_activity` ( `vaid` int(11) NOT NULL AUTO_INCREMENT, `uuid` varchar(128) DEFAULT NULL, `ip_address` varchar(15) DEFAULT NULL, `datetime` datetime DEFAULT NULL, `url` varchar(255) DEFAULT NULL, `user_agent` varchar(255) DEFAULT NULL, PRIMARY KEY (`vaid`), KEY `uuid` (`uuid`), KEY `ip_address` (`ip_address`)) ENGINE=MyISAM AUTO_INCREMENT=70134 DEFAULT CHARSET=utf8
表:contact_uuids
CREATE TABLE `contact_uuids` ( `contact_id` int(11) NOT NULL DEFAULT '0', `uuid` varchar(128) NOT NULL DEFAULT '', PRIMARY KEY (`contact_id`,`uuid`), KEY `contact_id` (`contact_id`), KEY `uuid` (`uuid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8
表:contact_log
CREATE TABLE `contact_log` ( `contact_log_id` int(11) NOT NULL AUTO_INCREMENT, `contact_id` int(11) NOT NULL, `datetime` datetime NOT NULL, `action` varchar(128) NOT NULL, `performed_by` varchar(64) NOT NULL, `ip_address` varchar(15) NOT NULL, PRIMARY KEY (`contact_log_id`), KEY `contact_id` (`contact_id`), KEY `ip_address` (`ip_address`), KEY `performed_by` (`performed_by`)) ENGINE=MyISAM AUTO_INCREMENT=9017 DEFAULT CHARSET=utf8
当前 SQL 语句:
SELECT DISTINCT(`va`.`vaid`), `va`.`datetime`, `va`.`uuid`, `va`.`ip_address`, `va`.`url`FROM `visitor_activity` `va`WHERE `va`.`uuid` IN (SELECT `uuid` FROM `contact_uuids` `cu` WHERE `cu`.`contact_id` = '1') || `va`.`ip_address` IN (SELECT DISTINCT(`ip_address`) FROM `contact_log` `cl` WHERE `cl`.`contact_id` = '1' && `performed_by` = 'Contact')ORDER BY `va`.`datetime` DES
最佳答案
将查询拆分为两个选择以连接不同的表,然后使用 union
连接所有数据。查询可能如下所示:
(SELECT DISTINCT(`va`.`vaid`),
`va`.`datetime`,
`va`.`uuid`,
`va`.`ip_address`,
`va`.`url`
FROM `visitor_activity` `va`,`contact_uuids` `cu`
WHERE `va`.`uuid`=`cu`.`uuid`
and `cu`.`contact_id` = '1')
UNION
(SELECT DISTINCT(`va`.`vaid`),
`va`.`datetime`,
`va`.`uuid`,
`va`.`ip_address`,
`va`.`url`
FROM `visitor_activity` `va`,`contact_log` `cl`
where `va`.`ip_address` = `cl`.`ip_address`
and `cl`.`contact_id` = '1' and `performed_by` = 'Contact')
ORDER BY datetime DESC
关于mysql - "WHERE IN (...)"的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11127910/
我是一名优秀的程序员,十分优秀!