Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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_Sql_Eloquent_Key Value - Fatal编程技术网

Mysql 如何将具有键值对的元表连接为父表的行

Mysql 如何将具有键值对的元表连接为父表的行,mysql,sql,eloquent,key-value,Mysql,Sql,Eloquent,Key Value,嗨,我有这个桌子结构 提交表格 +------+----------------------------------+ | id | form_id | +------+----------------------------------+ | 3812 | 00184e51e26a41e4a197035b62a1e07a | | 3815 | 00184e51e26a41e4a197035b62a1e07a | +------+------

嗨,我有这个桌子结构

提交表格

+------+----------------------------------+
| id   | form_id                          |
+------+----------------------------------+
| 3812 | 00184e51e26a41e4a197035b62a1e07a |
| 3815 | 00184e51e26a41e4a197035b62a1e07a |
+------+----------------------------------+
表格\提交\数据

+--------+--------------------+-----------+----------------+
| id     | form_submission_id | key       | value          |
+--------+--------------------+-----------+----------------+
| 534670 |              65952 | ip        | 192.168.255.10 |
| 534669 |              65952 | email     | NULL           |
| 534668 |              65952 | city      | NULL           |
| 534667 |              65952 | phone     | 123-123-1234   |
| 534666 |              65952 | full_name | גל             |
+--------+--------------------+-----------+----------------+
我的目标结果是这样的

+--------------------+----------------+-------+------+--------------+-----------+
| form_submission_id | ip             | email | city | phone        | full_name |
+--------------------+----------------+-------+------+--------------+-----------+
|              65952 | 192.168.255.10 | NULL  | NULL | 123-123-1234 | gal       |
+--------------------+----------------+-------+------+--------------+-----------+
我的键值对是不可预测的,所以我不能选择…作为“电子邮件”等

现在我用PHP做这个,但是我有5-7k+行的表单,它真的是非官方的,每个页面加载需要60-70秒,占用超过2GB的内存 我希望MySQL能帮我做到这一点。

您可以使用条件聚合:

这需要您事先知道表中可能存在的键列表;这是因为SQL查询必须返回一组固定的列。要使其动态化,您需要使用动态SQL,这可能超出了您的问题范围

注意:就相关而言,您不需要提交表来生成预期结果。如果还需要从该表中恢复某些信息,则需要向查询中添加一个简单的联接。

可以使用条件聚合:

这需要您事先知道表中可能存在的键列表;这是因为SQL查询必须返回一组固定的列。要使其动态化,您需要使用动态SQL,这可能超出了您的问题范围


注意:就相关而言,您不需要提交表来生成预期结果。如果还需要从该表恢复某些信息,则需要向查询中添加一个简单的联接。

对于键值结构,可以对每个键值对使用联接

  select  a.form_submission_id, a.ip
    , b.value as email
    , c.value as city
    , d.value as phone 
    , e.value as full_name
  from  form_submission_datas a 
  inner join  form_submission_datas b  = a.form_submission_id = b.form_submission_id 
    AND b.key = 'email'
  inner join  form_submission_datas c  = a.form_submission_id = c.form_submission_id 
    AND c.key = 'city'
  inner join  form_submission_datas d  = a.form_submission_id = d.form_submission_id 
    AND d.key = 'phone'
  inner join  form_submission_datas e  = a.form_submission_id = e.form_submission_id 
    AND e.key = 'full_name'
  where a.key ='ip' 
  and form_submission_id = 65952

对于键值结构,可以对每个键值对使用join

  select  a.form_submission_id, a.ip
    , b.value as email
    , c.value as city
    , d.value as phone 
    , e.value as full_name
  from  form_submission_datas a 
  inner join  form_submission_datas b  = a.form_submission_id = b.form_submission_id 
    AND b.key = 'email'
  inner join  form_submission_datas c  = a.form_submission_id = c.form_submission_id 
    AND c.key = 'city'
  inner join  form_submission_datas d  = a.form_submission_id = d.form_submission_id 
    AND d.key = 'phone'
  inner join  form_submission_datas e  = a.form_submission_id = e.form_submission_id 
    AND e.key = 'full_name'
  where a.key ='ip' 
  and form_submission_id = 65952

我想你想要的是解决你的问题的办法,而不是解决你的问题。这不是Mysql应该如何工作的。我认为您希望解决您的解决方案,但不是解决您的问题。这不是Mysql应该如何工作的。