2009-05-25 35 views
3

我一直在殴打我的大脑,我没有取得任何进展。我对SQL不太好,所以我希望答案很简单,我只是不知道。如何在mySQL中排序为动态生成的特定顺序?

我有2个表:包含我想要的数据,与主键“图像标识”举办一个名为“图像”。另一个称为“productPhotos”,它包含两个字段(加上一个主键):imageID和productID。因此对于给定的产品可能会有多个图像,并且可能会使用给定的图像来表示几种产品。

到目前为止,它工作得很好,但问题来了。我有一个动态生成的产品ID列表,我想加载所有代表这些产品的图像。我不仅要加载它们,还要按照列表中产品的顺序加载它们。

所以,如果我的产品列表“5,2,4”,我想我的输出列表中,为产品5由第一所有的图像,然后所有产品2图像,那么所有的产品4张图片我并不特别关心小组内的顺序。

抓取的右侧的图像是相当简单的,但让他们以正确的顺序是可恶。我想出了如何以正确的顺序得到我想要的图像的ID,但是实际上在没有单独的MySQL调用的情况下获取这些图像迄今一直困扰着我。我已经尝试设置一个临时表,将我想要的ID存储在@variable中,以及ORDER BY FIELD()和ORDER BY FIND_IN_SET()上的许多不同变体。

以下是我到目前为止: 从productPhotos选择imageID WHERE productID IN(5,2,4)ORDER BY FIELD(specificProductUID,5,2,4);

,成功地返回集合以正确的顺序imageIDs的,但我已经在正从那里把数据从图像表的imageIDs受到阻碍。我知道我可以很容易地通过在PHP中使用两个单独的数据库调用(一个获取imageID和另一个载入图像),但是(我认为)这将意味着一个重大的性能明智的,它似乎是应该有更好的方法来做到这一点。

预先感谢任何帮助。

回答

3
SELECT images.* 
FROM images 
INNER JOIN productPhotos ON images.imageID = productPhotos.imageID 
WHERE productID in (5, 2, 4) 
ORDER BY FIELD(specificProductUID, 5,2,4); 
+0

它就像一个美丽的梦想! 这就是JOIN的工作原理。非常感谢你的帮助。 – Robert 2009-05-25 16:30:40