2013-08-24 137 views
1

我想为搜索框执行下面的MySql查询。我试图返回“专辑”信息(标题等),同时在该专辑中包含第一张图片的缩略图。但是,我必须查找两张表来获取图像信息。首先,包含该相册中所有图像的photos_albums从该表中获取第一个图像ID,然后在photos表中查找该图像信息。我相信我遇到的问题是我需要告诉第一个LEFT JOIN将查询限制为1,但我没有这样做的运气。我想我需要在JOIN中进行JOIN?任何帮助,将不胜感激。MySql左加入内左连接

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 

回答

2

你可以尝试这样的事情

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 
+0

你好Peterm。谢谢您的帮助。原谅我,但我对'a.title','q.path'和'albums a'等有点困惑。这些只是我的专栏名称的简写“占位符” - 或者我会为您输入查询有它?对不起 - 仍然在这里学习;) – Chris

+1

这些是表别名(就像列别名)。我喜欢简短地缩短一个或两个字母。我建议从我的建议开始,然后你可以调整它,重命名别名,如果你想... – peterm

+1

这很好 - 非常感谢。我将不得不对桌面别名进行一些研究,因为我以前从未见过它们。再次 - 我真的很感谢帮助。 – Chris