先行者:也许我的数据库设计很糟糕。
我有一个系统,我在其中记录了有关元素的一些设置信息。然后其他用户可以向这些元素添加详细信息。我事先不知道这些细节的名称是什么,也不知道会有多少。因此,我将它们存储在 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 无法执行 SQL 语句:SQLSTATE[HY000]: 一般错误:1116 表太多; MySQL 一次连接只能使用 61 个表
我怎样才能改变我的设计,这样我就不会得到这个,最好是不必进行 61 个单独的查询并自己构建数据集。我使用 PHP/Yii 作为开发环境。
最佳答案
61 table 达到上限,引用https://dev.mysql.com/doc/refman/5.0/en/joins-limits.html
您可以创建一个大(临时)表并通过多个查询对其进行更新。最后你可以从中阅读。确保列名不要太长,因为也有限制。
关于php - mysql 61表连接限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29116500/