【问题标题】:insert into table taking info from another插入从另一个获取信息的表中
【发布时间】:2014-10-13 04:53:48
【问题描述】:

在 db 中,我有 2 个表“npc”和“droplist”

CREATE TABLE `npc`(  
  `id` smallint(5) unsigned NOT NULL DEFAULT '0',  
  `idTemplate` smallint(5) unsigned NOT NULL DEFAULT '0',  
  `name` varchar(200) NOT NULL DEFAULT '',  
  `serverSideName` tinyint(1) NOT NULL DEFAULT '0',  
  `title` varchar(45) NOT NULL DEFAULT '',  
  `serverSideTitle` tinyint(1) NOT NULL DEFAULT '0',  
  `class` varchar(200) DEFAULT NULL,  
  `collision_radius` decimal(6,2) DEFAULT NULL,  
  `collision_height` decimal(6,2) DEFAULT NULL,  
  `level` tinyint(2) DEFAULT NULL,  
  `sex` enum('etc','female','male') NOT NULL DEFAULT 'etc',  
  `type` varchar(22) DEFAULT NULL,  
  `attackrange` smallint(4) DEFAULT NULL,  
  `hp` decimal(30,15) DEFAULT NULL,  
  `mp` decimal(30,15) DEFAULT NULL,  
  `hpreg` decimal(30,15) DEFAULT NULL,  
  `mpreg` decimal(30,15) DEFAULT NULL,  
  `str` tinyint(2) NOT NULL DEFAULT '40',  
  `con` tinyint(2) NOT NULL DEFAULT '43',  
  `dex` tinyint(2) NOT NULL DEFAULT '30',  
  `int` tinyint(2) NOT NULL DEFAULT '21',  
  `wit` tinyint(2) NOT NULL DEFAULT '20',  
  `men` tinyint(2) NOT NULL DEFAULT '20',  
  `exp` int(9) NOT NULL DEFAULT '0',  
  `sp` int(9) NOT NULL DEFAULT '0',  
  `patk` decimal(12,5) DEFAULT NULL,  
  `pdef` decimal(12,5) DEFAULT NULL,  
  `matk` decimal(12,5) DEFAULT NULL,  
  `mdef` decimal(12,5) DEFAULT NULL,  
  `atkspd` smallint(4) NOT NULL DEFAULT '230',  
  `critical` tinyint(1) NOT NULL DEFAULT '1',  
  `aggro` smallint(4) NOT NULL DEFAULT '0',  
  `matkspd` smallint(4) NOT NULL DEFAULT '333',  
  `rhand` smallint(5) unsigned NOT NULL DEFAULT '0',  
  `lhand` smallint(5) unsigned NOT NULL DEFAULT '0',  
  `enchant` tinyint(1) NOT NULL DEFAULT '0',  
  `walkspd` decimal(10,5) NOT NULL DEFAULT '60',  
  `runspd` decimal(10,5) NOT NULL DEFAULT '120',  
  `targetable` tinyint(1) NOT NULL DEFAULT '1',  
  `show_name` tinyint(1) NOT NULL DEFAULT '1',  
  `dropHerbGroup` tinyint(1) NOT NULL DEFAULT '0',  
  `basestats` tinyint(1) NOT NULL DEFAULT '0',  
  PRIMARY KEY (`id`,`idTemplate`)  
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `droplist` (  
  `mobId` smallint(5) unsigned NOT NULL DEFAULT '0',  
  `itemId` smallint(5) unsigned NOT NULL DEFAULT '0',  
  `min` int(8) unsigned NOT NULL DEFAULT '0',  
  `max` int(8) unsigned NOT NULL DEFAULT '0',  
  `category` smallint(3) NOT NULL DEFAULT '0',  
  `chance` mediumint(7) unsigned NOT NULL DEFAULT '0',  
  PRIMARY KEY (`mobId`,`itemId`,`category`),  
  KEY `key_mobId` (`mobId`)  
) ENGINE=MyISAM DEFAULT CHARSET=utf8;  

如何插入到 'droplist' --> 'mobid' 'itemid' 'min' 'max' 'category' 'chance' where "droplist.mobid=npc.id" and from npc.type=L2Raidboss and npc .level >= 76;

INSERT ('' '6673' '10' '15' '1' '1000000') INTO droplist WHERE mobid IN (SELECT id FROM npc WHERE type= 'L2RaidBoss' AND level>= '76');

肯定这不起作用,但需要这样的东西

【问题讨论】:

  • 'npc' 和 'droplist' 之间是否有任何关系键
  • 如果有任何关系键,您可以使用连接并插入记录。你能详细介绍一下这两个表之间的关系吗
  • 不确定您所说的“...插入droplist... where droplist.mobid=npc.id...”是什么意思,但您可以尝试查看INSERT..SELECT 语句。
  • npc.id = droplist.mobid 如果 iam 没有错是关系键。

标签: mysql sql insert-select


【解决方案1】:

使用select查询查看npc表中是否存在mobid以及诸如(type=L2Raidboss and level >= 76)等要求

如果选择查询返回结果,则继续对droplist表进行插入过程

添加:

如果每行的值相同/恒定,

执行第一个查询:

SELECT id FROM npc WHERE type = 'L2RaidBoss' AND level >= '76'

将结果存储在数组中,继续第二个查询

while($array_results[id] ....)//depending on language that you will be using
{
insert into droplist(mobid,itemid,min,max,category,chance) values ('$array_results[id]','6673','10','15','1','1000000')
}

这取决于您将使用的语言,您会为此使用 php 吗?

【讨论】:

  • 从 npc 中选择 id,其中 type = 'L2RaidBoss' AND level >= '76';结果,我拥有了所有 76 级以上的 L2Raidboss。
  • 您可以将 id 存储在一个数组中并将其插入到下拉列表中,顺便说一句,您将在哪里获得这些 'itemid' 'min' 'max' 'category' 'chance' 的值?跨度>
  • 我想为 'itemid' 'min' 'max' 'category' 'chance' 添加相同的值,例如('6673' '10' '15' '1' '1000000')
  • 你会为此使用 php 吗?
  • 我想在控制台中使用 Navicat 放置下拉列表。只想从“npc”中获取 id,与“droplist”中的 mobid 相同,但只获取类型为“l2raidboss”且级别为 76 及更高的 id。
【解决方案2】:

试试这个:

INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

或者,如果您想从另一个数据库加载,您可以编写数据库迁移脚本,例如:它将提供MySql Officail site facality 以从 cst、文本文件导入。 供参考

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number LINES]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多