我有一个带有 innoDB 表的 MySql 数据库。非常简化,这是两个表的布局方式:
表 A:
- 控制ID(PK)
- 控制文本
表 B:
- 控制选项ID(pk)
- 控制ID(FK到表A)
- 控制选项类型
- 控制选项值
如此多的 controlOptions(table B) 可以引用一个控件(为该控件提供多个选项)。但是对于每个选项,在表 B 中创建了两行:一行带有 controlOptionType = "linkToCreator" 和 controlOptionValue =(创建模板的 ID *)。而另一行类型 = “optionSelected”,值 = “true”(或 false)。
- = 这是一个相当复杂的设置,但基本上我们不是设置列,而是通过类型是该列的名称来制作动态列。所以我无法使用 FK 链接到模板。
所以现在我需要选择每个控件(将有 2 个 controlOptions 链接到它),其中一个 controlOptionValue 值为真或假(取决于我需要什么),另一个 controlOptionValue 是我指定的文本 ID。
我认为最好的方法是
SELECT * FROM tableB WHERE controlOptionType = 'linkToCreator'
然后对该结果集进行循环说:
SELECT * FROM tableB WHERE tableB.controlID = (the controlID in this iterations row) AND tableB.controlValue = 'true'
但也许那真的效率低下,无论哪种方式,我都不知道该怎么做。如果我能获得一个我指定 templateID 和 true 或 false 的查询(即不使用存储过程),并且如果它没有找到任何东西,它会给我一个行结果,那就太好了。
顺便说一句,这是为了在我们的应用程序中进行搜索,需要遍历大量行,因此性能至关重要。是的,我知道设置不是最好的......
感谢:D