我有下表,表示单个小部件的数据:
id , c_id, grp, grp_name , label , seq, type , field, field_type , value
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , type1 , dgmp , text , 0
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg1 , extension , text , 1111
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , type1 , meec , text , CC5C9788
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg1 , password , text , test
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg1 , fwnoansenable , boolean , false
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg1 , fwenable , boolean , false
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg1 , fwsenable , boolean , false
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg1 , slenable , boolean ,
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg2 , fwnoans , text ,
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , type1 , adminpassword , text , afd((@&))
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , type1 , template , select ,
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , type1 , snserver , text , 127.0.01
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg2 , fwallenable , boolean , false
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg2 , password , text ,
246 , 17 , type1 , type1 grp1 , 5 - Widget XXX , 7 , reg1 , cerid , text ,
246 , 11 , type2 , type2 grp3 , 1 - Widget YYY , 1 , type2 , chistoryenable , boolean , true
246 , 11 , type2 , type2 grp3 , 1 - Widget YYY , 1 , type2 , sdenable , boolean , true
246 , 11 , type2 , type2 grp3 , 1 - Widget YYY , 1 , type2 , mailcback , text ,
246 , 11 , type2 , type2 grp3 , 1 - Widget YYY , 1 , type2 , mb , text ,
246 , 11 , type2 , type2 grp3 , 1 - Widget YYY , 1 , type2 , dndenable , boolean , true
246 , 11 , type2 , type2 grp3 , 1 - Widget YYY , 1 , type2 , cwtenable , boolean , true
246 , 11 , type2 , type2 grp3 , 1 - Widget YYY , 1 , type2 , fwing , boolean , true
246 , 11 , type2 , type2 grp3 , 1 - Widget YYY , 1 , type2 , hleenable , boolean , false
246 , 15 , type3 , type3 grpA , 3 - Widget MMM , 3 , type3 , free , boolean , false
我想知道是否有办法查找多个字段值而无需遍历每个详细记录,因为我可能会拥有多达10,000个小部件,每个都有这么多的细节。
我需要提取'字段':
的值 field value I'm expecting
meec CC5C9788
extension 1111
hleenable true
我还需要提取所有唯一的c_id和标签。例如, 我需要提取以下数据:
17, '5 - Widget XXX'
11, '1 - Widget YYY'
15, '3 - Widget MMM'
如果我必须循环浏览每条记录,但我想知道是否还有另一种我没有想到的更有效的方法。
例如,在我以前使用ADO的那天,我可以针对csv文件运行select语句,尽管它不是数据库。 同样地,我想知道我是否可以将内存中的lua表视为数据库中的表并对其运行select语句。 如果没有,还有其他建议吗?
感谢。
编辑1
这里的表在lua中实际上是什么样的,以防它有帮助。 如您所见,它返回一个索引号,为我自动生成。
widget["label"] = "widgetdetail"
widget["type"] = "grp"
widget = {}
widget[10] = {}
widget[10]["c_id"] = "17"
widget[10]["classname"] = "widget"
widget[10]["widget_id"] = "246"
widget[10]["grp"] = "grp2"
widget[10]["label"] = "5 - Widget XXX"
widget[10]["name"] = "fnoa_enable"
widget[10]["seq"] = "7"
widget[10]["type"] = "boolean"
widget[10] = "false"
widget[11] = {}
widget[11]["c_id"] = "17"
widget[11]["classname"] = "widget"
widget[11]["widget_id"] = "246"
widget[11]["grp"] = "grp2"
widget[11]["label"] = "5 - Widget XXX"
widget[11]["name"] = "extension"
widget[11]["seq"] = "7"
widget[11]["type"] = "text"
widget[11] = ""
widget[12] = {}
widget[12]["c_id"] = "17"
widget[12]["classname"] = "widget"
widget[12]["widget_id"] = "246"
widget[12]["grp"] = "grp1"
widget[12]["label"] = "5 - Widget XXX"
widget[12]["name"] = "fnoa"
widget[12]["seq"] = "7"
widget[12]["type"] = "text"
widget[12] = ""
widget[13] = {}
widget[13]["c_id"] = "17"
widget[13]["classname"] = "widget"
widget[13]["widget_id"] = "246"
widget[13]["grp"] = "grp2"
widget[13]["label"] = "5 - Widget XXX"
widget[13]["name"] = "sl_enable"
widget[13]["seq"] = "7"
widget[13]["type"] = "boolean"
widget[13] = ""
widget[14] = {}
widget[14]["c_id"] = "17"
widget[14]["classname"] = "widget"
widget[14]["widget_id"] = "246"
widget[14]["grp"] = "grp1"
widget[14]["label"] = "5 - Widget XXX"
widget[14]["name"] = "f_busy"
widget[14]["seq"] = "7"
widget[14]["type"] = "text"
widget[14] = ""
widget[15] = {}
widget[15]["c_id"] = "17"
widget[15]["classname"] = "widget"
widget[15]["widget_id"] = "246"
widget[15]["grp"] = "grp2"
widget[15]["label"] = "5 - Widget XXX"
widget[15]["name"] = "f_all"
widget[15]["seq"] = "7"
widget[15]["type"] = "text"
widget[15] = ""
widget[16] = {}
widget[16]["c_id"] = "17"
widget[16]["classname"] = "widget"
widget[16]["widget_id"] = "246"
widget[16]["grp"] = "widget"
widget[16]["label"] = "5 - Widget XXX"
widget[16]["name"] = "timezone"
widget[16]["seq"] = "7"
widget[16]["type"] = "text"
widget[16] = "EST5EDT"
widget[17] = {}
widget[17]["c_id"] = "17"
widget[17]["classname"] = "widget"
widget[17]["widget_id"] = "246"
widget[17]["grp"] = "grp2"
widget[17]["label"] = "5 - Widget XXX"
widget[17]["name"] = "fb_enable"
widget[17]["seq"] = "7"
widget[17]["type"] = "boolean"
widget[17] = "false"
等等......
编辑2
这些数据来自postgresql数据库,我无法控制。
答案 0 :(得分:1)
要使用Lua表工作,您需要将数据转换为hierarchical data model。
例如
widgets =
{[246] = {[17] = {... meec = "CC5C9788"; extension = "1111"; hleenable = true};
[11] = {... }
...}
...}
然后你可以查找
widgets[246][17].meec
等
这是否适合您取决于窗口小部件数据的语义,这在您的问题中并不明显。
如果您想运行通用查询,我建议您使用SQLite等数据库。有一些支持SQLite的Lua模块,包括lsqlite3,它也可以作为Lua摇滚。 SQLite将导入格式良好的csv文件。
问题编辑后1 ...
如果所有widget["value"][xx]["name"]
字段值都是唯一的,您可以对数据进行一次传递:
widget.index = {}
for i,t in pairs(widget.value) do widget.index[t.name] = i end
然后你可以使用例如
查找字段widget.value[widget.index.meec].value