Mysql查询搜索

时间:2013-05-11 05:28:04

标签: mysql

我需要在名为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',

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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让unicorns哭了。]

答案 2 :(得分: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;