注意:这不是重复:mySQL - Create a New Table Using Data and Columns from Three Tables。这个问题是关于从多个表中获取数据并实际创建包含该数据的新表。我只是想选择已有的数据。关于这个问题的答案非常具体针对所提出的问题,并且由于答案中的代码没有得到解释,因此对我没有帮助。所以不,这根本不是“完全相同的问题”。
我有一个关于加入两个我无法找到答案的MySQL表的问题。通常的连接类型似乎不是我追求的。也许这是不可能的,我不确定。
所以我有这样的第一个表(为了示例目的简化了表格):
ID Name Email Phone
1 John john@example.com 000-123-4567
2 Jane jane@example.com 000-890-1234
我的第二张表是这样排列的:
ID UserID meta_key meta_value
1 1 location_review 4
2 1 condition_review 1
3 1 price_review 5
4 2 location_review 4
5 2 condition_review 2
6 2 price_review 4
我正在使用一些现有的软件,只是做了一些修改,所以理想情况下我可以做我需要的,而不需要改变软件的编写方式。
我正在尝试加入这些表,所以它们看起来像这样:
ID Name Email Phone location_review condition_review price_review
1 John john@example.com 000-123-4567 4 1 5
2 Jane jane@example.com 000-890-1234 4 2 4
所以我需要将Table2中具有UserID的行添加到Table1中的数据中。
由于这是现有的软件,已经有一些代码可以加入这两个表,它就在这里:
SELECT *
FROM wpnf_comments as comment
INNER JOIN wpnf_commentmeta AS meta
WHERE comment.comment_post_ID = $prop_ID
AND meta.meta_key = 'rating'
AND meta.comment_id = comment.comment_ID
AND ( comment.comment_approved = 1
OR comment.user_id = $userID
)
我正在做的是:以前只有一个“评级”值,存储在元表中。您可以在上面的Join中看到它:
AND meta.meta_key = 'rating'
但是,我试图用3个单独的评级替换它。因此,当我有多个评级时,上面的连接,当只有一个评级时曾经工作过,但是当我有多个评级时,这种连接并没有真正起作用。
我非常感谢能够解决我需要做些什么来解决这个问题。如果重要的话,我也在使用PHP。
修改
这是我到目前为止的代码。它显示了我现在需要的所有正确的列名,但实际的值/数据没有显示出来。它返回0行。
SELECT
*
FROM
wpnf_comments t1
INNER JOIN
(SELECT
comment_id as comment_id2,
MAX(IF(meta_key = 'location-rating', meta_value, NULL)) AS location_rating,
MAX(IF(meta_key = 'condition-rating', meta_value, NULL)) AS condition_rating,
MAX(IF(meta_key = 'maintenance-rating', meta_value, NULL)) AS maintenance_rating,
MAX(IF(meta_key = 'professionalism-rating', meta_value, NULL)) AS professionalism_rating,
MAX(IF(meta_key = 'contact-rating', meta_value, NULL)) AS contact_rating,
MAX(IF(meta_key = 'availability-rating', meta_value, NULL)) AS availability_rating,
MAX(IF(meta_key = 'responsiveness-rating', meta_value, NULL)) AS responsiveness_rating,
MAX(IF(meta_key = 'price-rating', meta_value, NULL)) AS price_rating
FROM
wpnf_commentmeta
GROUP BY comment_id) temp_t
ON t1.comment_post_ID = temp_t.comment_id2
答案 0 :(得分:2)
使用MySQL数据透视表
SELECT
temp_t.user_id, t1.Name, t1.Email, t1.Phone, temp_t.location_review, temp_t.condition_review, temp_t.price_review
FROM
table_1st t1
INNER JOIN
(SELECT
UserID as user_id,
MAX(IF(meta_key = 'location_review', meta_value, NULL)) AS location_review,
MAX(IF(meta_key = 'condition_review', meta_value, NULL)) AS condition_review,
MAX(IF(meta_key = 'price_review', meta_value, NULL)) AS price_review
FROM
table_2nd
GROUP BY UserID) temp_t
ON t1.ID = temp_t.user_id