0

基本的に、必要なすべての結果を正常に取得する検索クエリがあります。また、すべての行の数 (最後のクエリの制限を超えている)、個別のカテゴリ 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
4

1 に答える 1

2

製品 ID で注文し、MAX(価格)、MIN(価格) を選択する必要があります。同じ SQL ステートメントで最小値と最大値を選択できない場合は、2 つの別々のクエリを実行する必要があるかもしれません。

たとえば。

Select name, Max(price, Min(price) from products join 
customer on customer_fk = customer_id
order by product_id(or in your case product_name)
于 2013-07-25T19:15:31.623 に答える