前兆:也许我的数据库设计很烂。
我有一个系统,其中记录了一些有关元素的设置信息。然后其他用户可以向这些元素添加详细信息。我不知道这些细节的名字是多少,或者会有多少。因此,我将它们存储在element_detail
表中。在某些情况下,我需要将这些行显示为列,即,在导出数据时,用户可以指定他们希望将哪些详细信息作为输出的一部分。为此,我使用以下类型的查询:
select ed1.item_value as 'detail_1_name',ed2.item_value as 'detail_2_name' from element e
left join element_detail ed1 on ed1.element_id=e.element_id and ed1.item_key='detail_1_name'
left join element_detail ed2 on ed2.element_id=e.element_id and ed2.item_key='detail_2_name'
直到我开始在单个数据集中查看61个以上的细节之前,这一直很好。这时我得到了:
CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 1116 Too many tables; MySQL can only use 61 tables in a join
我该如何更改设计,以免无法获得此结果,最好不用做61个单独的查询并自己构建数据集。我正在使用PHP / Yii作为开发环境。
最佳答案
在61个表上已达到限制,请参考https://dev.mysql.com/doc/refman/5.0/en/joins-limits.html
您可以创建一个大(临时)表,并通过多个查询对其进行更新。最后,您可以阅读。确保列名不要太长,因为还有一个限制。