Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql动态行_Mysql_Entity Attribute Value - Fatal编程技术网

mysql动态行

mysql动态行,mysql,entity-attribute-value,Mysql,Entity Attribute Value,我想用动态行在MySQL上执行查询的每个人 想象一下: 表2.1.1.1.1类别 +----+------------+ | id | name | +----+------------+ | 1 | Home Phone | | 2 | Cell Phone | | 3 | Fax | +----+------------+ 桌上电话 +----+-----------+-------------------+--------------+ | id |

我想用动态行在MySQL上执行查询的每个人

想象一下:

表2.1.1.1.1类别

+----+------------+
| id | name       |
+----+------------+
|  1 | Home Phone |
|  2 | Cell Phone | 
|  3 | Fax        | 
+----+------------+
桌上电话

+----+-----------+-------------------+--------------+
| id | entity_id | phone_category_id | phone_number |
+----+-----------+-------------------+--------------+
|  1 |         1 |                 1 | X19 XXX 2XX  |
|  2 |         1 |                 3 | X19 XXX 2XX  |
|  3 |         2 |                 1 | X18 XXX 4XX  |
|  4 |         2 |                 3 | X18 XXX 4XX  |
+----+-----------+-------------------+--------------+
我希望得到以下输出:

+-----------+--------------+--------------+-------------+
| entity_id | Home Phone   | Cell Phone   | Fax         |
+-----------+--------------+--------------+-------------+
|         1 |  X19 XXX 2XX |              | X19 XXX 2XX |             
|         2 |  X18 XXX 4XX |              | X18 XXX 4XX |
+-----------+--------------+--------------+-------------+
好的,我需要一些“动态的”,因为在未来,桌面电话的类别可能会增加。

这被称为“透视表”或“交叉表查询”。仅MySQL无法动态地完成这项工作。您总是需要提前知道列名,因此,如果您对输出使用编程/脚本语言,那么您可以在确定类别后,使用它动态构建带有
for
循环的SQL语句

但查询将如下所示:

SELECT
  phones.entity_id,
  CASE WHEN phones.phone_category_id = 1 THEN phones.phone_number ELSE NULL END AS `Home Phone`,
  CASE WHEN phones.phone_category_id = 2 THEN phones.phone_number ELSE NULL END AS `Cell Phone`,
  CASE WHEN phones.phone_category_id = 3 THEN phones.phone_number ELSE NULL END AS `Fax`
FROM phones
您尚未识别任何编程语言,因此以下是生成查询的伪代码:

categories = "SELECT id, name FROM phone_categories;"
foreach categories
  sql_columns = sql_columns + " CASE WHEN phones.phone_category_id = " + categories.id + " THEN phones.phone_number ELSE NULL END AS  `categories.name`