如何在mySQL中对动态生成的特定顺序进行排序?

时间:2009-05-25 01:55:21

标签: mysql sql join sql-order-by

我一直在绞尽脑汁,我没有取得任何进展。我对SQL不是很了解,所以我希望答案很简单,我不知道。

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

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

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

获取正确的图像非常简单,但以正确的顺序获取它们是可恶的。我想出了如何以正确的顺序获取我想要的图像的ID,但实际上在没有单独的MySQL调用的情况下获取这些图像到目前为止我没有找到。我已经尝试设置一个临时表,将我想要的ID存储在@variable中,并在ORDER BY FIELD()和ORDER BY FIND_IN_SET()上存储许多不同的变体。

这是我到目前为止所得到的:     SELECT imageID FROM productPhotos WHERE productID IN(5,2,4)ORDER BY FIELD(specificProductUID,5,2,4);

它以正确的顺序成功返回了一组imageID,但是我从那里开始从图像表中拉出那些imageID的数据时遇到了困难。我知道我可以通过在PHP中使用两个单独的数据库调用(一个用于获取图像ID而另一个用于加载图像)非常容易地完成它但是(我认为)这意味着在性能方面具有重大影响而且看起来就像应该有更好的方法来做到这一点。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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);