0

标题可能比较混乱,不知道怎么写。这是我需要做的。我有两个表,cronjobs 和 cronjob_seeds。在将 cronjob 添加到数据库之前,我需要查看它是否存在。

考虑这些表:

定时任务:

-id-   -callback_model-         -callback_method-
1       movie_suggestion_model    fetch_similar_movies

cronjob_seeds:

-cronjob_id-   -seed-
1               seed1
1               seed2

在添加新的 cronjob 之前,我需要查看数据库中是否存在完全相同的 cronjob。我写了以下查询,但如果 cronjob 有多个种子,它就不起作用。如果它只有一个种子,它会很好用,但每次 cronjob 有多个种子时,它什么都不返回。

SELECT `id`
FROM (`cronjobs`)
INNER JOIN `cronjob_seeds` ON `cronjob_seeds`.`cronjob_id` = `cronjobs`.`id`
WHERE `cronjobs`.`callback_model` = 'movie_suggestion_model'
    AND `cronjobs`.`callback_method` = 'fetch_similar_movies'
    AND `cronjob_seeds`.`seed` = '1'
    AND `cronjob_seeds`.`seed` = 10

我错过了什么吗?我应该使用其他类型的连接吗?

而且,题外话,但种子是回调方法的参数,我只是把它命名为有点奇怪。

4

3 回答 3

1

你应该使用 IN 子句

将您的查询更改为:

SELECT `id`
FROM (`cronjobs`)
INNER JOIN `cronjob_seeds` ON `cronjob_seeds`.`cronjob_id` = `cronjobs`.`id`
WHERE `cronjobs`.`callback_model` = 'movie_suggestion_model'
    AND `cronjobs`.`callback_method` = 'fetch_similar_movies'
    AND `cronjob_seeds`.`seed` IN ('seed1', 'seed2')
于 2012-10-14T16:52:30.480 回答
0

仅检查 cron 条目是否存在,不需要加入,除非您需要检查它是否存在并且具有特定的种子。要仅检查是否存在 cron 条目,您需要执行以下操作:

SELECT `id`
FROM `cronjobs`
WHERE `cronjobs`.`callback_model` = 'movie_suggestion_model'
    AND `cronjobs`.`callback_method` = 'fetch_similar_movies'
于 2012-10-14T16:55:31.137 回答
0

即使您有单行 _cronjob_seeds_ ,您的查询如何返回结果。导致最后两个 AND 条件相互冲突。您应该将其修改为:

 AND `cronjob_seeds`.`seed` BETWEEN  '1' AND '10'

您是否还在质疑 cronjob_seed 或 cronjob 中是否存在记录?您的查询参数似乎不清楚。您是否正在尝试检查是否存在具有特定种子的特定 cronjob?提示:尝试用人类语言而不是 sql 编写查询

于 2012-10-14T17:48:02.013 回答