假设我有两个表:
mysql> show columns from profiles;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| full_name | varchar(100) | NO | | NULL | |
| date_of_birth| date | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
mysql> select * from profiles;
+-------------------+----------------+
| id | full_name | date_of_birth |
+-----+-------------+----------------+
| 1 | John Smith | 2000-01-01 |
| 2 | Anna Smith | 1995-01-03 |
+-----+-------------+----------------+
和
mysql> show columns from language_en;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| column_name | varchar(100) | NO | | NULL | |
| label | varchar(100) | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
mysql> select * from language_en;
+-------------------+----------------+
| column_name | label |
+------------------+-----------------+
| id | ID |
| full_name | Name |
| date_of_birth | DOB |
+------------------+-----------------+
我想运行一个返回的查询:
+-------------------+----------------+
| ID | Name | DOB |
+-----+-------------+----------------+
| 1 | John Smith | 2000-01-01 |
| 2 | Anna Smith | 1995-01-03 |
+-----+-------------+----------------+
这只是查询“SELECT * FROM profile”,但使用标签而不是列名。如何使用列名称而不是直接输入它们来执行此操作? 我知道我能做到:
SELECT id AS ID, full_name AS Name, date_of_birth AS DOB FROM profiles
但是我追求的是动态的东西,例如:
SELECT id AS language_en.label FROM profiles, language_en WHERE language_en.column_name = profiles.COLUMN_HEADER????
任何帮助将不胜感激
最佳答案
简短回答:我不这么认为。我认为 MySQL 的 AS 语句除了简单的文本标签之外不接受任何其他内容。
我认为将国际化放入数据库模式级别可能是错误的想法;通过在 Web 应用程序 (php) 层中保持翻译级别,您似乎可以让您的生活更加理智。毕竟,您的用户永远不需要直接查看列的名称,对吗?
关于php - 一个表中的字段值可以用作 MySQL 查询中的列名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677457/