2009-05-25 123 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