我有2张桌子。我需要根据另一个表中的ID从一个表中选择数据。
表格是:
first_table
user_id
4
5
6
second_table
post_id|meta_key |meta_value |
1 |email |test@test.com|
1 |first_name|test |
1 |last_name |hey |
2 |email |test@test.com|
2 |first_name|test |
2 |last_name |hey |
3 |email |test@test.com|
3 |first_name|test |
3 |last_name |hey |
4 |email |4th@test.com |
4 |first_name|4th fname |
4 |last_name |4th |
5 |email |test@test.com|
5 |first_name|test |
5 |last_name |hey |
6 |email |test@test.com|
6 |first_name|test |
6 |last_name |hey |
我需要数据:
post_id|first_name|last_name|email
4 |4th fname |4th |4th@test.com
同样我将获得post_id 5,6的这些数据。该ID将来自first_table
user_id
列。
答案 0 :(得分:1)
MAX()
和CASE
可以帮助您获得结果。
试试这个:
select post_id
,max(case when meta_key='first_name' then meta_value end)first_name
,max(case when meta_key='last_name ' then meta_value end)last_name
,max(case when meta_key='email' then meta_value end)email
from second_table
where post_id in(select user_id from first_table)
group by post_id
答案 1 :(得分:0)
您可以对两个表进行内部联接,因为您希望在user_id
级别看到输出,您可以使用MAX聚合其他字段(或者甚至是其他函数,因为这些都是文本值)基于要转换为列的meta_key
。
SELECT A.USER_ID,
MAX(CASE WHEN B.META_KEY = 'FIRST_NAME' THEN B.META_VALUE END) AS FIRST_NAME,
MAX(CASE WHEN B.META_KEY = 'LAST_NAME' THEN B.META_VALUE END) AS LAST_NAME,
MAX(CASE WHEN B.META_KEY = 'EMAIL' THEN B.META_VALUE END) AS EMAIL
FROM
FIRST_TABLE A
INNER JOIN
SECOND_TABLE B
ON A.USER_ID = B.POST_ID
GROUP BY A.USER_ID;
答案 2 :(得分:0)
您可以在不使用内连接的情况下尝试
function userdata($id){
$SQL = "SELECT user_id FROM first_table where user_id= :id;
$q = $this->DBcon->prepare($SQL);
$q->execute(array(':id' => $id));
$data = $q->fetch(PDO::FETCH_ASSOC);
$postid = $data[post_id]
$sql2 = "SELECT post_id, first_name, last_name, email FROM second_table Where post_id = $postid";
$q = $this->DBcon->prepare($SQL2);
$q->execute();
$data = $q->fetch(PDO::FETCH_ASSOC);
}
答案 3 :(得分:0)
SELECT first_table.user_id,second_table.post_id,second_table.meta_key ,second_table.meta_value first_table LEFT JOIN second_table ON first_table.user_id=second_table.post_id;
如果您需要条件明智,请使用查询的最后一个where子句 user_id = 4
答案 4 :(得分:0)
您正在显示的演示表是一种存储数据的错误方法。存储数据的正确方法是将用户详细信息存储在用户表中,并分别在post表中发布详细信息。然后添加用户表的主键作为post表的外键。 然后,您可以执行查询以获得上述结果。