我有一个包含500多个列的表,该表由用户动态创建和命名。用户可以创建新列,但不能删除任何新列。
我承担了编写关键字搜索的任务,该关键字搜索将在所有列中搜索特定的字符串,并返回该记录的ID。可以想象,查询当前看起来像:
SELECT form_id FROM table_name WHERE col1 LIKE '%str%' OR col2 LIKE '%str%' or col3 LIKE '%str%'.. etc.
令人难以置信的缓慢。为了解决这个问题,我正在尝试创建另一个表,该表中的数据以这种不同的格式存储:
form_id, col_name, value
1, 'col2', 'some random value'
1, 'col1', 'another random value'
然后使用搜索:
SELECT id FROM new_table_name WHERE value LIKE '%str%'
我可以导出所有数据并将其格式化,然后将其插入新表中。但是我将如何保持新表的更新呢?修改原始表后,是否可能会有触发器自动插入/更新新表?即使我之前都不知道列名?
您可以通过取消旋转原始表来构造表:
似乎您正在寻找EAV模型。
另一个有趣的选项