0

私はこれまで、結合されたテーブルから1行を見つけるだけでよいプロジェクトに取り組んできました。しかし今、私は複数の行をつかむ必要があります。

したがって、現状では、私のSQLは次のように機能します。

この特定のプロジェクトの各会社の行を選択します。これだけで会社の詳細(名前、ID、電話番号、何とか)が見つかります。次に、会社ごとに送信されたフォームデータを含むテーブルに参加します(複数のフォーム-複数のレコード)

これまで、結合で検索する1つの形式を指定してきましたが、複数の形式を指定する必要があります。

使用するWHERE form_id = 1 OR form_id = 2 OR form_id = 3 ...と、会社ごとに見つかった最初のフォームの一致のみの結果が得られます。

クエリを混同して最初のフォームを検索し、フォームデータが異なる会社ごとに複数のレコードを返す場合、これはこの意味で機能します。

しかし、ビューでこの配列をループして、レコードごとにテーブル行を作成しています(以前は各行は新しい会社でした)が、後者を使用すると、同じ会社に対して複数のレコードが表示されます。

私はこれを行うことができますか?group by後者の方法で試しましたが、結果は1レコードだけになります。

    SELECT DISTINCT p.project_company_has_user_id, p.project_company_has_user_project_id, p.project_company_has_user_user_id, c.company_id, c.company_hall_no, c.company_company_name, c.company_type, c.company_country, c.company_stand_number, c.company_image_file_1, p2.project_id, p2.project_name, u.user_id, u.user_username, o.orders_id, o2.order_detail_id, o2.order_detail_product_id, f2.form_question_has_answer_id, f2.form_question_has_answer_request, f2.form_question_has_answer_form_id, f2.form_question_has_answer_user_id 
    FROM project_company_has_user p 
    INNER JOIN company c ON p.project_company_has_user_company_id = c.company_id 
    INNER JOIN project p2 ON p.project_company_has_user_project_id = p2.project_id 
    INNER JOIN user u ON p.project_company_has_user_user_id = u.user_id 
    INNER JOIN form f ON p.project_company_has_user_project_id = f.form_project_id 
    LEFT JOIN orders o ON p.project_company_has_user_user_id = o.orders_user_id 
    LEFT JOIN order_detail o2 ON ((o2.order_detail_orders_id = o.orders_id AND (o2.order_detail_product_id = 65 OR o2.order_detail_product_id = 68 OR o2.order_detail_product_id = 64))) 
    LEFT JOIN form_question_has_answer f2 ON ((f2.form_question_has_answer_form_id = 297 AND f2.form_question_has_answer_user_id = p.project_company_has_user_user_id)) 
    WHERE (f.form_template_name = "custom" AND p.project_company_has_user_garbage_collection = 0 AND p.project_company_has_user_project_id = 48) AND (LCASE(c.company_country) LIKE "%uk%" OR LCASE(c.company_country) LIKE "%uk%") ORDER BY company_company_name asc
4

2 に答える 2

1

order_detailにo2として別のフィールドが必要です。このフィールドは、ポジショニングレコードのrow_index(position)などです。

LEFT JOIN order_detail o2 ON (o2.row_index=1 AND (o2.order_detail_orders_id = o.orders_id AND (o2.order_detail_product_id = 65 OR o2.order_detail_product_id = 68 OR o2.order_detail_product_id = 64))) 
于 2012-04-20T19:35:30.670 に答える
0

個人的には、すべての一致をリストするために必要な要素のテーブルに外部結合を使用します。そのデータをクリーンアップする必要がある場合は、ロジックを結合条件に組み込むことができます(ステップ2として)。処理するデータの量と、後で同じプロシージャで再利用する必要があるかどうかに応じて、そのプライマリデータセットを一時テーブルに投稿し、それを後のロジックのソース(プライマリ)として使用することができます。

お役に立てば幸いです。コードが必要な場合はお知らせください。ただし、非常に簡単です。

よろしく

マック

于 2012-04-20T09:29:50.150 に答える