2012-10-14 1 views
0

제목이 혼란 스럽거나 넣을 방법을 잘 모른다. 여기 내가해야 할 일이있다. 두 테이블, cronjobs 및 cronjob_seeds 있습니다. cronjob이 데이터베이스에 추가되기 전에 존재하는지 확인해야합니다.MySQL : 조인 된 테이블에 여러 개의 결과가있는 경우이 선택 쿼리가 행을 찾지 못하는 이유는 무엇입니까?

cronjobs :

-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 

내가 뭔가 부족합니까? 다른 유형의 조인을 사용해야합니까?

그리고 주제에서 벗어나지 만 콜백 메소드의 매개 변수는 씨앗입니다. 나는 그 이름을 조금 이상합니다.

답변

1

당신은 당신의 조회를 변경 절

에 사용한다 : 당신이 존재하는지 확인해야하지 않는 한, cron 항목이 존재하는지 확인 만

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') 
+0

해결책을 시도해보고 몇 분만 기다리십시오. – qwerty

+0

감사합니다, 잔뜩, 아름답게 일했다! 내가 할 수있을 때 몇 분 안에 받아 들일거야. – qwerty

+0

EXISTS를 사용하여이 쿼리를 약간 빠르게 할 수 있습니다 : 'SELECT EXISTS (SELECT 'ID ...' –

0

, 당신은 가입하지 않아도 특정 씨앗이 있습니다. 크론 항목이 같은 것을 할 필요가있는 경우에만 확인하려면 : 당신이 _cronjob_seeds_에 대해 하나의 행을 한 경우에도 쿼리 반환 결과를 제공하는 방법

SELECT `id` 
FROM `cronjobs` 
WHERE `cronjobs`.`callback_model` = 'movie_suggestion_model' 
    AND `cronjobs`.`callback_method` = 'fetch_similar_movies' 
+0

특정 종자가 있는지 확인해야합니다. – qwerty

+0

@qwerty 그런 다음 Chandu 제안을 사용해야합니다. :) – dan

0

. 마지막 두 AND 조건이 서로 충돌하기 때문에 또한이 cronjob_seed 또는 cron 작업에 대한 기록의 실존에 의문을 제기하는

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

: 당신은 그것을 수정해야합니까? 검색어 매개 변수가 명확하지 않은 것 같습니다. 특정 씨앗이있는 특정 cronjob이 있는지 확인하려고합니까? 팁 : SQL보다 인간 언어로 쿼리를 작성하십시오.

관련 문제