0

タイトルが紛らわしいかもしれません。これが私がしなければならないことです。cronjobs と cronjob_seeds の 2 つのテーブルがあります。データベースに追加する前に、cronjob が存在するかどうかを確認する必要があります。

次の表を検討してください。

cron ジョブ:

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

cronjob_seeds:

-cronjob_id-   -seed-
1               seed1
1               seed2

新しい cronjob を追加する前に、まったく同じ cronjob がデータベースに存在するかどうかを確認する必要があります。次のクエリを書きましたが、cronjob に複数のシードがあると機能しません。シードが 1 つしかない場合はうまく機能しますが、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

_cronjob_seeds_ に単一の行がある場合でも、クエリが結果を返すのはなぜですか。最後の 2 つの AND 基準が互いに競合します。次のように修正する必要があります。

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

また、cronjob_seed または cronjob にレコードが存在するかどうか疑問に思っていますか? クエリ パラメータが明確ではないようです。特定のシードを持つ特定の cronjob が存在するかどうかを確認しようとしていますか? ヒント: SQL よりも人間の言語でクエリを記述してみてください。

于 2012-10-14T17:48:02.013 に答える
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 に答える