2011-09-21 5 views
0

두 테이블이 있습니다 : searchescommonWords. 사용자 입력 Q가 주어진 경우 Q가 commonWords에 없으면 searches에 입력하고 싶습니다.다른 테이블을 확인한 후 단어를 테이블에 삽입하려면 어떻게해야합니까?

솔직히 말해서 나는 이것을 어떻게 할 것인지 완전히 혼란스러워합니다. 어떻게 INSERT INTO와 전체 SELECT를 결합 할 수 있습니까?

가 나는 두 개의 쿼리와 함께 할 수있어 :

$db->query('SELECT * FROM commonWords WHERE word = ?', $q); 
if ($db->affectedRows() > 0) 
    $db->query('INSERT INTO searches (search) VALUES (?)', $q); 

그러나, 나는 하나 개의 쿼리에이 작업을 한정하고 싶습니다.

도움 주셔서 감사합니다. 당신이 행을 삽입 할 경우

답변

2

이 시도하는 commonWords

insert into searches (search) select word from commonWords where word = ? 

에서 exisists하지만 당신은 당신이 여러 행을 삽입 할 수없는 경우 searches.search 의 고유 인덱스를 설정해야하기 때문에 당신은 자르해야 같은 값

당신은 검색에 비 기존의 단어를 삽입하려는 경우에, 당신은 Q가 발견되지 않은 경우,이

$db->query('insert into searches (search) select case when count(word) = 0 then \'?\' else NULL end as word from commonWords where word = ?', $q); 
+0

"을 감안할 때 사용자가 입력 한 Q를 시도해야 commonWords "--- ** commonWords에 ** 행이 없을 때'searching'에 행을 삽입해야한다고 생각했습니다. – zerkms

+0

예, 읽었지만 그의 문장'if ($ db-> affectedRows()> 0)'다른 storry를 말하고있다 ... 나는 나의 대답을 편집했다. 그리고 지금 당신은 2 개의 해답을 가지고있다 ;-) – Daniel

+0

null을 삽입하면 에러가 발생할 수있다. (null 제약이없는 경우) 그렇지 않으면 많은 가비지 행 – zerkms

관련 문제