MySQL左连接中的左连接

3
我正在尝试使用MySql查询搜索框。我想返回“Album”信息(如标题等),同时包括该专辑中第一张图片的缩略图。但是,我必须查找两个表以获取图像信息。首先,在photos_albums中查找包含该专辑中所有图像的表,从该表中获取第一张图像的ID,然后在photos表中查找该图像信息。我认为我遇到的问题是,我需要告诉第一个LEFT JOIN将查询限制为1,但我没有成功。我认为我需要在JOIN中进行JOIN?任何关于此的帮助将不胜感激。
SELECT albums.title, albums.title_url, photos.path, photos.medType, photos.vpath
FROM albums
LEFT JOIN photos_albums
    ON photos_albums.album_id = albums.id
LEFT JOIN photos
    ON photos_albums.photo_id = photos.id
WHERE albums.user = '$site_user'
AND (
    albums.title LIKE '$keyword%'
    OR albums.title LIKE '% $keyword%')
LIMIT 6
1个回答

5
您可以尝试类似以下的做法:
SELECT a.title, a.title_url, q.path, q.medType, q.vpath
  FROM albums a LEFT JOIN 
(
    SELECT pa.album_id, pa.photo_id, p.path, p.medType, p.vpath
      FROM 
    (
        SELECT album_id, MIN(photo_id) photo_id
          FROM photos_albums 
         GROUP BY album_id
    ) pa JOIN photos p
        ON pa.photo_id = p.id
) q 
    ON a.id = q.album_id
 WHERE a.user = '$site_user'
   AND (
         a.title LIKE '$keyword%'
      OR a.title LIKE '% $keyword%')
 LIMIT 6

你好Peterm。感谢你的帮助。请原谅我,但是我对'a.title'、'q.path'和'albums a'等内容有些困惑。这些只是我的列名的简写占位符吗?还是我需要按照你的查询方式输入查询?抱歉 - 我还在学习中 ;) - Chris
1
这些是表别名(就像列别名一样)。我喜欢将它们保持简短,通常是一个或两个字母。我建议你从我提出的开始,然后你可以根据需要进行微调,重新命名别名... - peterm
1
那个完美地运行了 - 非常感谢。我得研究一下表别名,因为我以前从未见过它们。再次感谢您的帮助。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接