3

我一直在为此绞尽脑汁,但我没有取得任何进展。我不太擅长 SQL,所以我希望答案很简单,我只是不知道。

我有 2 个表:一个称为“图像”,其中包含我想要的数据,用主键“imageID”组织。另一个称为“productPhotos”,它包含两个字段(加上一个主键):imageID 和 productID。因此,对于给定的产品,可能有多个图像,并且给定的图像可能用于表示多个产品。

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

因此,如果我的产品列表是“5,2,4”,我希望我的输出列表首先包含产品 5 的所有图像,然后是产品 2 的所有图像,然后是产品 4 的所有图像。我没有t 特别关心子组内的顺序。

获取正确的图像非常简单,但是以正确的顺序获取它们是可恶的。我想出了如何以正确的顺序获取我想要的图像的 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);

这成功地以正确的顺序返回了一组 imageID,但我一直难以从那里获取从图像表中提取这些 imageID 的数据。我知道只需在 PHP 中使用两个单独的数据库调用(一个用于获取 imageID,另一个用于加载图像),我就可以很容易地做到这一点,但是(我认为)这意味着性能方面的巨大打击,而且看起来就像应该有更好的方法来做到这一点。

提前感谢您的帮助。

4

1 回答 1

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);
于 2009-05-25T02:10:26.990 回答