SQL Select 来自 table 的最新结果,其中关键字 = 和竞争对手 =

SQL Select latest result from table where keyword = and competitor =

我有两个 table:

tablename: input_keywords
Cols: keyword, last_check, pages_deep, check_freq_days

tablename: rank_result
Cols: keyword, result_url, position, last_check, competitor

input_keywords.keyword 是唯一的,因此我们不会查找多个关键字。

rank_result 保留我们抓取的所有数据并存储一些元数据。

我需要显示以下内容

a = input_keywords
b = rank_result

a.keyword, a.last_check, b.position WHERE b.competitor = 'xxx'

但只有 select 来自 rank_result

的最后/最近结果

我尝试遵循其他几个答案,但没有得到我期望的结果。


更新1

CREATE TABLE `input_keywords` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `keyword` char(150) DEFAULT NULL COMMENT 'the keyword....',
  `last_check` timestamp NULL DEFAULT '2000-01-01 00:00:00' COMMENT 'Last check timestamp, default to years ago so we check immediatly',
  `CREATION` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `MODIFICATION` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `p_deep` int(1) DEFAULT '5' COMMENT 'how many pages deep to search - default 5',
  `check_freq_days` int(11) DEFAULT '3' COMMENT 'how often to check this keyword in DAYS default 3',
  `type` char(50) DEFAULT NULL COMMENT 'Product, Category, other etc',
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNQ_Keyword` (`keyword`)
) ENGINE=InnoDB AUTO_INCREMENT=5865 DEFAULT CHARSET=utf8;


CREATE TABLE `rank_result` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `keyword` char(150) DEFAULT '',
  `result_url` text,
  `position` int(11) DEFAULT NULL,
  `check_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `useragent_used` char(255) DEFAULT NULL,
  `proxy_log` text,
  `check_date` date DEFAULT NULL COMMENT 'date of the check - easier for graph plotting',
  `competitor` tinytext,
  PRIMARY KEY (`id`),
  KEY `idx_KEYWORD` (`keyword`),
  KEY `keyword` (`keyword`,`check_time`,`competitor`(50))
) ENGINE=InnoDB AUTO_INCREMENT=2868936 DEFAULT CHARSET=utf8;

input_keywords

的示例内容
----------------------------------------------------------------------------------------------------------------------------------
| id | keyword               | last_check          | CREATION            | MODIFICATION        | p_deep | check_freq_days | type |
----------------------------------------------------------------------------------------------------------------------------------
| 1  | acoustic guitars      | 2017-03-07 17:03:55 | 2017-01-20 12:27:17 | 2017-03-07 17:03:55 | 5      | 1               | NULL |
----------------------------------------------------------------------------------------------------------------------------------
| 2  | guitar accessories    | 2017-03-05 11:03:49 | 2017-01-20 12:27:27 | 2017-03-05 11:03:49 | 5      | 3               | NULL |
----------------------------------------------------------------------------------------------------------------------------------
| 3  | guitar amps           | 2017-03-05 11:04:05 | 2017-01-20 12:27:33 | 2017-03-05 11:04:06 | 5      | 3               | NULL |
----------------------------------------------------------------------------------------------------------------------------------
| 4  | guitar strings        | 2017-03-05 13:03:51 | 2017-01-20 12:27:42 | 2017-03-05 13:03:51 | 5      | 3               | NULL |
----------------------------------------------------------------------------------------------------------------------------------
| 5  | guitar effects pedals | 2017-03-05 11:03:43 | 2017-01-20 12:27:50 | 2017-03-05 11:03:43 | 5      | 3               | NULL |
----------------------------------------------------------------------------------------------------------------------------------



---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| id  | keyword          | result_url                           | position | check_time          | useragent_used                       | proxy_log | check_date | competitor   |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 493 | acoustic guitars | http://www.competitor.com/… | 1        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | Competitor1      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 494 | acoustic guitars | http://competitor2.com… | 2        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | Competitor2   |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 495 | acoustic guitars | https://out_website.com | 3        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | US    |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 496 | acoustic guitars | http://competitor3.com | 4        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | Competitor3 |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 497 | acoustic guitars | http://competitor4.com | 5        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | NULL         |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 498 | acoustic guitars | https://www.amazon.co.uk/acoustic-g… | 6        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | Amazon       |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 499 | acoustic guitars | http://compx.com | 7        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | compX          |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 500 | acoustic guitars | http://compx.com | 8        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | compX      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 501 | acoustic guitars | http://www. compx.com/  | 9        | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | NULL         |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 502 | acoustic guitars | http://www. compx.com… | 10       | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | NULL         |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 503 | acoustic guitars | http://www. compx.com/        | 11       | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | NULL         |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 504 | acoustic guitars | http://www. compx.com… | 12       | 2017-01-18 09:36:17 | Mozilla/5.0 (compatible; MSIE 10.0;… | NULL      | 2017-01-18 | NULL         |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

这个table记录了我们查看关键字排名的每一天 (所以同一个关键字和竞争对手有很多记录)

如果我们有排名,我只需要我们的排名,否则 return 只需要关键字。

我的理想输出是

|keyword  | last_check | p_deep | check_freq_days | position |
|keyword1 | 2017-03-06 | 5      |.  3.            | 4.       |
|keyword2 | 2017-03-06 | 5.     |.  3.            | NULL.    |

我最好的尝试是:

select input_keywords.keyword, input_keywords.last_check, input_keywords.p_deep, `input_keywords`.`check_freq_days`, rank_result.position from input_keywords join rank_result on input_keywords.keyword=rank_result.keyword where rank_result.competitor = 'OurCompany' and input_keywords.last_check=rank_result.check_time

这几乎有效,但如果我们未被列出,则不会 return 结果。

因为我是从 input_keywords table 开始的,所以我希望列出所有关键字,以及我们当前的排名(如果有的话)。

添加 rank_result_id 字段作为主要字段并自动递增 添加字段后获取数据 ORDER BY rank_result_id DESC

我已经通过执行以下操作解决了这个问题。

  1. 将竞争对手字段添加到 input_keywords table
  2. 添加了一些索引以加快查询速度

创建了以下内容SQL

SELECT i.`keyword`, i.`last_check`, i.`p_deep`, i.`check_freq_days`, r.`position`
  FROM input_keywords i
  LEFT JOIN rank_result r 
    ON i.`keyword` = r.`keyword` AND i.`competitor` = r.`competitor` AND i.`last_check` = r.`check_time`

然后 returns 每个输入关键字一行,我们在排名中的最后已知位置