在其他搜索中将列中的值用作列名

时间:2019-05-04 21:36:42

标签: mysql

我是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";
  • 上面的ActivityFieldID始终是单个值,但是上面的查询最多可以返回5行(如果在activityFieldDetailsTable中为该特定活动定义了5个问题)。
$query1 = "SELECT ($query) FROM activityTable WHERE ActivityID= :ActivityID"; 
  • 此搜索将返回特定列(AS1,AS2,.. AS5)中的值。
$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] | 

感谢您的帮助。

0 个答案:

没有答案