基本的に、必要なすべての結果を正常に取得する検索クエリがあります。また、すべての行の数 (最後のクエリの制限を超えている)、個別のカテゴリ ID の数をチェックしていますが、できれば同じクエリで最小/最大が必要です。
私が見る問題は、それが結合されたクエリからのものであるため、結合して、接続されているすべての ID を照合し、最小/最大にする数を確認する必要があることです。
たとえば、20 件の結果があり、すべて「価格」が異なりますが、価格は別のテーブルにあり、その別のテーブルから最低価格と最高価格を見つけたいとします。最小値と最大値の結果が 1 つだけ必要なので、それをカウント クエリに追加することもできます (メイン クエリの制限部分もバイパスする必要があるため)。
これについて何か考えはありますか?
ここにいくつかの追加の詳細があります(主なクエリが結合します)
$query->join('LEFT','#__mrsp AS m
ON (t.name = m.name AND m.mrsp =
(SELECT min(mrsp) FROM #__mrsp WHERE name = t.name))');
name
この場合は一意の数値なので、id のように機能します。これもjoomla
データベース構文です。
1 つの mrsp (複数のサプライヤー) に対して複数の結果が存在する可能性があるため、この結合で最小値を選択しているため、メイン クエリには最小値のみが必要です。私の質問を少し拡張するには、「最大」は返される最大の「最小」値である必要がありますが、それはそれほど重要ではありません。
編集:
もう少し詳しく説明します。
基本的に、各製品には 50 のサプライヤーがいるとしましょう。それらすべての最低価格を 1 に下げたいと考えています。
最小結合後に 1300 個の製品がある場合、1300 個の価格も添付する必要があるため、見つかった最小価格に 1 つの列、見つかった最高価格に 1 つの列が必要です。
これにより、結果の最低価格と、検索中の最高価格と結果が表示されます。
つまり、各製品に 50 のサプライヤーがいる場合、価格のテーブルには 50*1300 行が含まれます。最初の最小値がそれに最適になるように、1300〜1300行が必要です。
現在のクエリのビルドは次のとおりです。
SELECT
MAX(m.mrsp) max_price,
MIN(m.mrsp) min_price
FROM #__products t
LEFT JOIN #__mrsp m ON t.name = m.name
WHERE IF(t.width IS NOT NULL, IF(t.w_override, t.j_width, t.width), t.j_width) = 17
AND (t.publish_up = '0000-00-00 00:00:00' OR t.publish_up <= '2013-07-25 20:14:22')
AND (t.publish_down = '0000-00-00 00:00:00' OR t.publish_down >= '2013-07-25 20:14:22')
AND t.state = 1
ORDER BY t.id