-4

Railsでのこのクエリは終わりません。なんで?クエリは次のとおりです。

    SELECT CONCAT(f.name, ' ', f.parent_names) AS FullName,
       stts.name AS 'Status',
       u.name AS Unit,
       city.name AS City,
       hus.mobile1 AS HusbandPhone,
       wife.mobile1 AS WifePhone,
       f.phone AS HomePhone,
       f.contact_initiation_date AS InitDate,
       fh.created_at AS StatusChangeDate,
       cmt.created_at AS CommentDate,
       cmt.comment AS LastComment,
       f.reconnection_date AS ReconnectionDate,
  (SELECT GROUP_CONCAT(t.name, ' ')
   FROM taggings tgs
   JOIN tags t ON tgs.tag_id = t.id
   WHERE tgs.taggable_type = 'family'
     AND tgs.taggable_id = f.id) AS HandlingStatus
FROM families f
JOIN categories stts ON f.family_status_cat_id = stts.id
JOIN units u ON f.unit_id = u.id
JOIN categories city ON f.main_city_cat_id = city.id
LEFT JOIN contacts hus ON f.husband_id = hus.id
LEFT JOIN contacts wife ON f.wife_id = wife.id
LEFT JOIN comments cmt ON f.id = cmt.commentable_id
AND cmt.created_at =
  (SELECT MAX(created_at)
   FROM comments
   WHERE commentable_id = f.id)
LEFT JOIN family_histories fh ON f.id = fh.family_id
AND fh.created_at =
  (SELECT MAX(created_at)
   FROM family_histories
   WHERE family_id = f.id
     AND family_history_cat_id = 1422)
AND fh.family_history_cat_id = 1422
WHERE 1=0
  OR (f.family_status_cat_id = 1422
      AND (  (SELECT MAX(_fh.created_at)
              FROM family_histories _fh
              WHERE _fh.family_history_cat_id = 1422
                AND _fh.family_id = f.id
                AND _fh.new_val LIKE '%1422%') BETWEEN '2010-03-10' AND '2011-03-02'))

何か不足していますか?Synatx は正しいので、何が問題なのですか?

4

1 に答える 1

1

問題は、多くのサブクエリが必要なことだと思います。かなりの時間が必要です。

サブクエリで取得した情報の一部をメイン テーブルに格納することをお勧めします。

別の方法として、ストア プロシージャを作成してプロセスを高速化することもできます。

よろしくお願いします

于 2013-03-06T17:34:39.327 に答える