前体:也许我的数据库设计很糟糕。
我有一个系统,我记录一些关于元素的设置信息。然后其他用户可以向这些元素添加详细信息。我不知道这些细节的名称是什么,或者会有多少。因此,我将它们存储在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作为开发环境。
答案 0 :(得分:0)
在61个表格中达到了限制,参考https://dev.mysql.com/doc/refman/5.0/en/joins-limits.html
您可以创建一个大(临时)表并通过多个查询对其进行更新。最后你可以从中读到。确保没有太长的列名,因为还有一个限制。