0

私はMAX()mysql関数のtizagでチュートリアルを実行し、以下のクエリを作成しました。これはまさに必要なことを実行します。唯一の問題は、必要なすべての行を処理できるように、さらに2つのテーブルに結合する必要があることです。

    $query = "SELECT idproducts, MAX(date) FROM results GROUP BY idproducts ORDER BY MAX(date) DESC"; 

以下にこのクエリがあります。これには、必要なJOINがあり、機能します。

       $query =     ("SELECT * 
                    FROM operators
                    JOIN products
                    ON operators.idoperators = products.idoperator JOIN results
                    ON products.idProducts = results.idproducts 
                    ORDER BY drawndate  DESC
                    LIMIT 20");

誰かが私の2番目のクエリのJOIN要素と一番上のクエリをマージする方法を教えてもらえますか?私はphpとmysqlに不慣れです。これは、私が読んだコンピューター言語への最初の冒険であり、これら2つのクエリを機能させるために一生懸命努力しましたが、私はレンガの壁にいます。JOIN要素を最初のクエリに追加する方法がわかりません:(

親切な人が初心者を憐れんで私を助けてくれませんか?

4

2 に答える 2

0

このクエリを試してください。

SELECT 
    * 
FROM 
    operators
    JOIN products
        ON operators.idoperators = products.idoperator 
    JOIN 
    (
        SELECT 
            idproducts, 
            MAX(date) 
        FROM results 
        GROUP BY idproducts 
    ) AS t
    ON products.idproducts = t.idproducts
ORDER BY drawndate  DESC
LIMIT 20
于 2012-09-03T19:19:03.077 に答える
0

JOINは、集計関数とはある程度独立して機能し、集計関数が動作する中間結果セットを変更するだけです。MySQLドキュメントの記述方法を指摘したいと思います。このヒントでは、 SELECT構文で「table_reference」という用語を使用し、それがJOIN構文で何を意味するかを拡張しています。基本的に、テーブルが指定されている単純なクエリは、そのテーブルを完全なJOIN句に拡張するだけで、クエリは同じ基本的な方法で動作しますが、中間結果セットが変更されます。

JOINSと集約を理解するのに役立った考え方を示唆するために、「中間結果セット」と言います。MySQLが最終結果を作成する順序を理解することは、必要な結果を確実に取得する方法を知るために重要です。通常、「FROM」の後に指定する最初のテーブルの最初の行を確認することから始め、「WHERE」句を確認して一致するかどうかを判断します。すぐに破棄できない場合は、その行を指定された最初のJOINに結合しようとし、「これはWHEREによって破棄されますか?」を繰り返します。これはすべてのJOINに対して繰り返され、結果セットに行を追加するか、行を削除するか、JOIN、WHERE、およびデータに応じて1つだけを残します。このプロセスは、私が「中間結果セット」と言うときに参照しているものを構築します。完全なクエリの開始と終了の間のどこかで、MySQLのメモリには、先ほど説明したプロセスを使用して構築した、潜在的に大規模なテーブルのようなデータ構造があります。そうして初めて、基準に従って結果の集計(GROUP)が開始されます。

したがって、クエリの場合、具体的に何を目的としているかによって異なります(OPでは完全には明確ではありません)。2番目のクエリのMAX(date)が必要な場合は、その式をSELECT句に追加してから、集計仕様を最後に追加します。

SELECT *, MAX(date)
FROM operators
 ...
GROUP BY idproducts
ORDER BY ...

または、2番目のクエリのJOINセクションを最初のクエリに追加することもできます。

于 2012-09-03T19:20:01.220 に答える