【发布时间】:2016-06-26 20:34:07
【问题描述】:
我有两张桌子:users 和 users_info
users 看起来像这样:
+----+----------+-------+
| id | slug | name |
+----+----------+-------+
| 1 | theploki | Kris |
+----+----------+-------+
而users_info 看起来像这样:
+----+--------+----------+---------------+
| id | parent | info_key | info_val |
+----+--------+----------+---------------+
| 1 | 1 | email | kris@kris.com |
+----+--------+----------+---------------+
| 2 | 1 | age | 28 |
+----+--------+----------+---------------+
我想SELECT 一个user 拥有user_info 电子邮件='kris@kris.com'
- 和 -
返回所有user_info 值和users 值
这是我正在寻找的结果:
+----+----------+-------+---------------+-----+
| id | slug | name | email | age |
+----+----------+-------+---------------+-----+
| 1 | theploki | Kris | kris@kris.com | 28 |
+----+----------+-------+---------------+-----+
到目前为止,我得到的最接近的是这个查询:
SELECT users.*, users_info.* FROM users
INNER JOIN users_info on users_info.parent = users.id
where users.id = (SELECT users_info.parent FROM users_info
WHERE users_info.parent = users.id
AND users_info.info_val = 'kris@kris.com')
它返回这个结果:
+----+----------+-------+----+--------+----------+---------------+
| id | slug | name | id | parent | info_key | info_val |
+----+----------+-------+----+--------+----------+---------------+
| 1 | theploki | Kris | 1 | 1 | email | kris@kris.com |
+----+----------+-------+----+--------+----------+---------------+
| 1 | theploki | Kris | 2 | 1 | age | 28 |
+----+----------+-------+----+--------+----------+---------------+
显然我不需要users_info 结果的id,我希望每个info_key 都是“别名”(或列名),每个info_val 都是那个“别名”的值”。
【问题讨论】:
-
您不能编写一个可以动态生成不同列数的 SQL 语句。您需要创建一个程序来查找任何给定父级的可用 info_key,然后动态生成 SQL 语句以根据您的喜好格式化数据。您的问题之前已提出 - search for dynamic EAV
-
向我们展示您的期望,更正您的查询会更容易。只需创建另一个数组
-
我可以在你调用的存储过程中做到这一点,比如
call uspGetStuff('kris@kris.com');... 1 行输出,你想要的水平。尽我所能。
标签: mysql join inner-join entity-attribute-value