2011-08-20 6 views
0
INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded) 
SELECT s_id, ?, ?, ?, ?, ? 
FROM servers 
WHERE name = ? 

사용자가 내 사이트에 이미지를 업로드 할 때 현재이 SQL 문을 사용하고 있습니다. s_id 필드는 servers 테이블에 대한 외래 키이고 u_id 필드는 users 테이블에 대한 외래 키입니다. 사용자 이름 (항상 유일한)으로 사용자 테이블에서 사용자 ID (u_id)를 선택하고이 삽입 문에서 사용하려고합니다.행을 삽입 할 때 두 번째 외래 키 선택

나는 이미 서버 ID (s_id)를 선택하는 부분을 수행했지만, 이는 거의 우연이며 주위를 어지럽게합니다. 두 개의 select 문을 사용하도록이 쿼리를 조정하는 방법을 잘 모르겠습니다.

감사합니다. 감사합니다.

답변

0

시도 :

DECLARE userID int 
SELECT u_id FROM users into userID 
WHERE useranem = ? 

그런 다음 나중에 당신의 INSERT에 사용자 ID 변수를 사용합니다. 저는 SQL 서버 사용자이고 MySQL은 아니지만 제가 읽은 바로는 구문에 대한 권리가 있다고 생각합니다.

0
INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded) 
SELECT (select s_id from servers where name=?') as s_id, 
(select user_id from users where username=?) as user_id, 
?, ?, ?, ?; 
+0

내가 말할 수있는 것부터 다른 ???도 또한 서버에서 나옵니다. 그래서 OP도 그 값을 필요로하고 많은 하위 쿼리로 끝날 것입니다. –

+0

어디에서 이름, 파일 이름, 파일 크기를 저장합니까? –

0

필자는 두 가지 고유 한 인덱스 스캔을 얻고 그 결과를 얻었습니다. 고유 한 키와 리턴 할 값 모두에 대해 테이블이 고유하게 색인화되어있는 한.

insert into 'images' (s_id, u_id, name, filename, filesize, uploaded) 
select (select s_id 
      from servers 
      where name = ?) 
    , (select u_id 
      from users 
      where username = ?) 
    , 'name' 
    , 'filename' 
    , 'filesize' 
    , 'uploaded' 
    from dual; 
0

나는 아무도

INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded) 
SELECT s_id, u_id, ?, ?, ?, ? 
FROM servers JOIN users 
WHERE name = ? AND username = ? 

를 언급하지 이유는 무조건 가입 궁금해하지만, 그럼에도 불구하고 주어진 서버 및 사용자와 단 하나 개의 행을 산출한다.

+0

치료법을 사용하면 다른 방법은 약간 복잡해 보입니다. 감사! :) – John