mysql - 子查询和连接

Den*_*nis 5 php mysql sql join subquery

我不太确定这是否是正确的方法,这是我的情况:

目前,我想要选择15个画廊,然后离开通过ID与用户表连接,但我也想从不过从每个画廊一个随机的图片我知道你不能限制左连接(图片)到只拍摄一张随机图片而不做子查询.

这是我到目前为止所得到的,但它不能正常工作:

SELECT galleries.id, galleries.name, users.username, pictures.url 
FROM galleries 
LEFT JOIN users ON users.id = galleries.user_id 
LEFT JOIN pictures ON (
    SELECT pictures.url 
    FROM pictures 
    WHERE pictures.gallery_id = galleries.id 
    ORDER BY RAND() 
    LIMIT 1) 
WHERE active = 1 
ORDER BY RAND() 
LIMIT 15
Run Code Online (Sandbox Code Playgroud)

我也尝试使用Active Record执行此操作但是在执行两次左连接后我遇到了问题,是否可以在此处获取子查询:

$this->db->select('galleries.id, galleries.name, users.id as user_id, users.username');
$this->db->from('galleries');
$this->db->join('users', 'users.id = galleries.user_id','left');
$this->db->join('pictures','pictures.gallery_id = galleries.id AND','left');
$this->db->where('active',1);
Run Code Online (Sandbox Code Playgroud)

我希望它不要乱,但我真的开始让所有的SQL查询混淆..

编辑: 使用CodeIgniter进行活动记录

And*_*mar 2

您可以在子查询中获取随机图片:

select 
    g.name, u.username,
    (select url from pictures p where p.gallery_id = g.gallery_id 
     order by rand() limit 1) as url
from galleries g
left join users u on g.user_id = u.id
where g.active = 1
Run Code Online (Sandbox Code Playgroud)

根据您的评论,您可以为子查询中的每个画廊选择一张图片。这是假设图片表有一个 ID 列。

select 
    g.name, u.username, p.url, p.name
from (
    select id, user_id, name,
        (select id from pictures p 
         where p.gallery_id = g.gallery_id 
         order by rand() limit 1) as samplepictureid
    from galleries
    where g.active = 1
) g
left join users u on g.user_id = u.id
left join pictures p on p.id = g.samplepictureid
Run Code Online (Sandbox Code Playgroud)