php – 如何从列名称来自子查询的列中获取值?
我想问一下,是否可以让
MySQL将子查询的结果解释为一个表列来选择,而不仅仅是一个字符串?
我所拥有的是一些表,其中一些列是动态创建的,还有一个表存储创建的这些自定义列. 在这个特定的实现中,我使用它来存储我们正在开发的内容管理系统的自定义文章的自定义字段. 这是架构的草图. custom_column ----------------------------------------------------------------- id field_name field_type field_display table_name ----------------------------------------------------------------- 1 news_author string Author news 2 news_body text Body news 3 news_heading title Heading news 4 name title Name testimonials 5 message text Message testimonials 考虑到所有文章(新闻,推荐书等)都有相应的field_type = title自定义字段… 我想指定一个特定的表/文章,并通过执行以下操作获得所有记录的文章标题: SELECT (SELECT field_name FROM custom_columns WHERE field_type = "title" AND table_name = "testimonials") AS article_title FROM testimonials 并得到一个结果: id article_title ----------------------- 1 John Doe 2 Mary Jane 3 Justin Case 而不是这个,这是MySQL通过上述查询给我的东西: id article_title ----------------------- 1 name 2 name 3 name 我可以看到MySQL正在将名称(子查询的结果)解释为字符串,而不是要从中选择的列名. 当然,我可以这样做: SELECT *,(SELECT field_name FROM custom_columns WHERE field_type = "title" AND table_name = "testimonials") AS article_title FROM testimonials 并操纵结果以在程序中获得我想要的内容,例如: $article_title = $row->{$row->article_title}; //I use PHP,and most times use mysql_fetch_object to fetch rows from a MySQL resource. 但我希望避免查询我不需要的所有无用的列,并希望节省资源.毕竟,我只需要一个可变数量的一列,理论上可以是很多. 我到处寻找一个我可能缺少的MySQL功能,但是从来没有找到过.我希望有人可以指出我正确的方向,或者更好的是,如果有的话,提供更好的解决方案. 谢谢! 编辑:对于那些可能不熟悉上面的PHP语法的人来说,这是一个等效的场景,但使用非常常见的数组语法代替PHP的对象语法: $row[$row['article_title']]; 解决方法
一般的经验法则是,只要您需要在SQL中动态查找列(PHP不同),您就应该重新考虑您的架构.如果你问一个如何做到这一点的问题,我相信你会找到很多愿意帮忙的人.
我发现的唯一动态MySQL是in this question,其他一切都是变种.您的$article_title = $row-> {$row-> article_title};实际上是最好的解决方案,除非您提前知道可能的列名. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |