php – 如何从列名称来自子查询的列中获取值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何从列名称来自子查询的列中获取值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2437字,纯文字阅读大概需要4分钟。
内容图文
![php – 如何从列名称来自子查询的列中获取值?](/upload/InfoBanner/zyjiaocheng/769/9462f9dbe2c4407b88a13a76eefbd195.jpg)
我想问一下,是否可以让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};实际上是最好的解决方案,除非您提前知道可能的列名.
内容总结
以上是互联网集市为您收集整理的php – 如何从列名称来自子查询的列中获取值?全部内容,希望文章能够帮你解决php – 如何从列名称来自子查询的列中获取值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。