0
INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded)
SELECT s_id, ?, ?, ?, ?, ?
FROM servers
WHERE name = ?

現在、ユーザーが自分のサイトに画像をアップロードするときに、このSQLステートメントを使用しています。s_idフィールドはテーブルへの外部キーでserversあり、フィールドu_idusersテーブルへの外部キーです。ユーザーテーブルからユーザーID(u_id)をユーザー名(常に一意)で選択し、この挿入ステートメントで使用したいと思います。

サーバーID(s_id)を選択する部分はすでに実行しましたが、それはかなりまぐれで混乱していました。このクエリを2つのselectステートメントに適合させる方法がよくわかりませんか?

助けていただければ幸いです、ありがとうございます!

4

4 に答える 4

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, 
?, ?, ?, ?;
于 2011-08-20T20:56:57.497 に答える
0

試す:

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

その後、INSERTでuseriD変数を使用します。私はMySQLではなくSQLServerユーザーですが、読んだことから、構文は正しいと思います。

于 2011-08-20T20:58:00.047 に答える
0

私はこのようなものを好みます。そうすれば、2つの固有のインデックススキャンを取得でき、それで終わりです。テーブルが一意のキーと返される値の両方で一意にインデックス付けされている限り。

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;
于 2011-08-20T20:59:55.507 に答える
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 = ?

これは無条件の結合ですが、それでも、指定されたサーバーとユーザーで1つの行のみを生成する必要があります。

于 2011-08-20T21:06:16.650 に答える