我是MySQL的新手,所以请更正我犯的任何术语错误。
我在努力的地方是理解如何将一列中的值用作另一个表中的列名。
我已经阅读了Stack Overflow在我的问题之前提供的先前问题(还有其他问题),并且无法弄清所示的各种JOIN,CASE,UNION和GROUP BY之间的共同“模式”。取得重大进展。
CREATE TABLE `activityFieldTable` (
`ActivityFieldID` int(11) NOT NULL,
`UserID` int(11) NOT NULL,
`ActivityName` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
上表定义了用户可以从下拉菜单中选择的“活动”列表。
CREATE TABLE `activityFieldDetailsTable` (
`ActivityFieldDetailID` int(11) NOT NULL,
`ActivityFieldID` int(11) NOT NULL,
`DetailName` varchar(150) NOT NULL,
`DetailType` varchar(100) NOT NULL,
`DetailValues` varchar(150) NOT NULL,
`ActivityTableColumn` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
上表允许每个活动拥有自己的“问题”列表,因此,当用户选择一个活动时,下表提供了为问题创建特定类型的输入元素所需的详细信息。 ActivityTableColumn定义了用户答案的存储位置(activityTable中的列名,如下所示)
CREATE TABLE `activityTable` (
`ActivityID` int(11) NOT NULL,
`UserID` int(11) NOT NULL,
`ActivityFieldID` int(10) NOT NULL,
`AS1` varchar(150) DEFAULT NULL,
`AS2` varchar(150) DEFAULT NULL,
`AS3` varchar(150) DEFAULT NULL,
`AS4` varchar(150) DEFAULT NULL,
`AS5` varchar(150) DEFAULT NULL,
`StartTime` datetime(6) NOT NULL,
`EndTime` datetime(6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
上表是存储用户输入的所有活动的位置。目前,它有5列(AS1..AS5),可以在用户输入活动时存储针对活动特定问题的“答案”。
我正在使用PHP,并认为也许提供查询的内容可能有助于理解我要执行的操作:
$query = "SELECT ActivityTableColumn FROM activityFieldDetailsTable WHERE ActivityFieldID= :ActivityFieldID";
$query1 = "SELECT ($query) FROM activityTable WHERE ActivityID= :ActivityID";
$query2 = "SELECT activityFieldDetailsTable.DetailName, activityFieldDetailsTable.DetailType, activityFieldDetailsTable.DetailValues, activityFieldDetailsTable.ActivityTableColumn, activityTable.($query) FROM activityFieldDetailsTable WHERE ActivityFieldID= :ActivityFieldID AND ActivityID= :ActivityID";
预期结果是:
| DetailName | DetailType | DetailValues | ActivityTableColumn | [activityTable.($columnName)] |
| Location | radio | Outside, Inside | AS1 | [values from the 'AS1' column from activityTable] |
| Temperature | text | 10 | AS2 | [values from the 'AS2' column from activityTable] |
感谢您的帮助。