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) 的部分,但这几乎是侥幸和混乱。我不太确定如何调整此查询以具有两个选择语句?

感谢您的帮助,谢谢!

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 变量。我是 SQL Server 用户,而不是 MySQL,但从我读到的内容来看,我认为我的语法是正确的。

于 2011-08-20T20:58:00.047 回答
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;
于 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 = ?

这是一个无条件的连接,但它应该只产生一行,给定的服务器和用户。

于 2011-08-20T21:06:16.650 回答