-2

我需要在名为 t_npc 的表中搜索列(如下所示),以获取特定值i,但多次失败。

示例(不起作用)

SELECT * FROM t_npc WHERE a_item_0 LIKE '%a_item_%' = 123;
SELECT * FROM t_npc WHERE 'a_item_0' <=> 'a_item_19' = 123;
SELECT a_index FROM t_npc WHERE a_item_0 LIKE 'a_item_%' = 123;
SELECT a_index, a_name FROM t_npc WHERE t_npc.a_item_0 or t_npc.a_item_1 or t_npc.a_item_2 or t_npc.a_item_4 = 44;

和许多其他人在下面的列名中搜索一个值,但它永远不会起作用。我已经尝试了这些列的通配符,但仍然没有运气。

`a_item_0` int(11) NOT NULL DEFAULT '-1',
`a_item_1` int(11) NOT NULL DEFAULT '-1',
`a_item_2` int(11) NOT NULL DEFAULT '-1',
`a_item_3` int(11) NOT NULL DEFAULT '-1',
`a_item_4` int(11) NOT NULL DEFAULT '-1',
`a_item_5` int(11) NOT NULL DEFAULT '-1',
`a_item_6` int(11) NOT NULL DEFAULT '-1',
`a_item_7` int(11) NOT NULL DEFAULT '-1',
`a_item_8` int(11) NOT NULL DEFAULT '-1',
`a_item_9` int(11) NOT NULL DEFAULT '-1',
`a_item_10` int(11) NOT NULL DEFAULT '-1',
`a_item_11` int(11) NOT NULL DEFAULT '-1',
`a_item_12` int(11) NOT NULL DEFAULT '-1',
`a_item_13` int(11) NOT NULL DEFAULT '-1',
`a_item_14` int(11) NOT NULL DEFAULT '-1',
`a_item_15` int(11) NOT NULL DEFAULT '-1',
`a_item_16` int(11) NOT NULL DEFAULT '-1',
`a_item_17` int(11) NOT NULL DEFAULT '-1',
`a_item_18` int(11) NOT NULL DEFAULT '-1',
`a_item_19` int(11) NOT NULL DEFAULT '-1',
4

3 回答 3

0
select value from table where field = 'value'

或者

select value from table where field like '%value%'

你都在做,这是行不通的。提供有关您想要完成的任务的更多详细信息,但根据您的要求,这就是您的查询不起作用的原因。

但是,您可以:

select value from table where field_a = 'valuea' AND field_b like '%valueb'
于 2013-05-11T05:32:23.257 回答
0

漫长的道路:

SELECT a_index, a_name FROM t_npc WHERE 
t_npc.a_item_0 = 44 or t_npc.a_item_1 = 44 or t_npc.a_item_2 = 44
...
or t_npc.a_item19 = 44;

稍微好一点,您可以使用 IN :

select a_index, a_name from t_npc where 44 in
(a_item_0, a_item_1, a_item_2, a_item3, 
 ...
a_item18, a_item19);

您还应该创建一个 t_npc_items 表,而不是在 t_npc 上有这么多字段。

[您可以通过从 information_schema 中查询字段名称然后执行该命令来生成 sql,但是 metasql 会让独角兽哭泣。]

于 2013-05-11T05:37:37.223 回答
0

您应该使用不同的表结构。

尝试这样的事情

CREATE TABLE npc (
  Npc_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (Npc_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


CREATE TABLE item (
  Npc_id bigint(20) unsigned NOT NULL,
  Item_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  Item_value int(11) NOT NULL,
  PRIMARY KEY (Item_id),
  KEY Npc_id (Npc_id),
  CONSTRAINT Item_ibfk_1 FOREIGN KEY (Npc_id) REFERENCES Npc (Npc_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
于 2013-05-11T05:49:35.117 回答