mysql更新查询以使用另一个表的id设置字段

时间:2015-09-08 05:50:32

标签: php mysql

我在数据库中有3个表

1)视频。

id    name
1     one
2     two
3     three

2)session_has_video。

session_id    video_id
1             1
1             3

3)channel_has_session。

channel_id    session_id    videos
1             1

我想更新channel_has_session.videos video.id,其中video.id位于session.session_id。这意味着它应该是1,3

因此,更新的表应该如下所示

channel_has_session。

channel_id    session_id    videos
1             1             1,3

我试过这个查询,但显然没有工作。

update channel_has_session set videos = ( SELECT video_id FROM session_has_video where session_id=1 ) where session_id=1 and channel_id=1

在MySQL中有这样的最简单方法吗?

2 个答案:

答案 0 :(得分:2)

您可以将channel_has_session表加入包含每个session_id的临时表及其逗号分隔的video_id值列表。然后使用此CSV列表在SET表上执行channel_has_session。试试这个问题:

UPDATE
    channel_has_session AS ch
    INNER JOIN (
        SELECT session_id, GROUP_CONCAT(video_id) AS videos
        FROM session_has_video
        GROUP BY session_id
    ) AS t on ch.session_id = t.session_id
SET ch.videos = t.videos
WHERE ch.channel_id = 1 AND ch.session_id = 1

答案 1 :(得分:0)

您可以通过使用group_concat()函数实现它的一种方式:

UPDATE channel_has_session
SET videos = (
    SELECT GROUP_CONCAT(DISTINCT video_id SEPARATOR ',')
    FROM session_has_video
    WHERE session_id = 1
)
WHERE session_id = 1 AND channel_id = 1

但是,如上所述,不建议在数据库中使用以逗号分隔的值。