0

わかりました、誰かがこれに対するエレガントな解決策を持っていることを願っています. 私は 2 つのクエリでそれを実行してきましたが、1 つのクエリで実行できると考えていました。

サンプルデータ:

ID、エリア、AgentID、価格
1、 AZ1、15、100
2
、AZ1、16、110 3、AZ2、15、180
4、
AZ1、12、109 5、AZ3、15、180
6 、AZ1、11、90
7 、AZ2、15、140
8、
AZ1、10、110 9、AZ4、11、120
10 、AZ1、12、130

クエリの基本的な考え方は、Area が AZ1 であるデータからすべて (SELECT *) を取得し、価格の降順で並べ替える必要があるということです。非常に基本的な:SELECT * FROM data WHERE Area=AZ1 ORDER BY Price DESC

ただし、最初に並べ替えるには、AgentID=15 の 2 つのエントリが必要です。以前は、これを 2 つのクエリとして実行していました。

SELECT * FROM data WHERE Area=AZ1 AND AgentID=15 ORDER BY Price DESC LIMIT 2

SELECT * FROM data WHERE Area=AZ1 ORDER BY Price DESC

最初の結果を最初に表示するだけです。このようにするのは大したことではありませんが、物事を滑らかでセクシーにするために、これらを組み合わせることはできますか? サブクエリを実行しようとすると、「このバージョンの MySQL はまだ LIMIT などのサブクエリをサポートしていません」と表示されました。

また、PHP (私は array_diff を使用していました) を介して繰り返しの結果を整理する必要がないことも良いでしょう。さらに、URL ルーティングでの不適切なページネーションの修正 (オフセット マイナス 2 など) が可能になります。

また、これがこのメモリ/速度/その他の点で最善の方法である場合は、それも遠慮なく言ってください! (私はそれが疑わしいですが)。

ありがとう!

4

2 に答える 2