3

私はこれで頭を悩ませてきましたが、進歩はありません。私はSQLがあまり得意ではないので、答えが私が知らない単純なものであることを願っています.

私は2つのテーブルを持っています.1つは「images」と呼ばれ、必要なデータを含み、主キー「imageID」で編成されています。もう 1 つは「productPhotos」と呼ばれ、imageID と productID の 2 つのフィールド (および主キー) が含まれています。そのため、特定の製品に対して複数の画像が存在する場合があり、特定の画像が複数の製品を表すために使用される場合があります。

これまでのところうまく機能していますが、ここで問題が発生します。動的に生成された製品 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 で 2 つの別々のデータベース呼び出し (1 つはイメージ ID を取得するため、もう 1 つはイメージをロードするため) を使用するだけでかなり簡単に実行できることはわかっていますが、(私が思うに) それはパフォーマンス面で大きな打撃を与えることを意味します。それを行うためのより良い方法があるはずです。

助けてくれてありがとう。

4

1 に答える 1