1

2つのテーブルがactivitiesありactivity_toursます。 activitieshasManyとは>activity_toursによって関連付けられています。次のSQLを記述して、2つの条件のいずれかを持つ両方のテーブルの行を選択しました。activities.idactivity_tours.activity_id

  1. activity_tours.tour_type特定のORがある場合
  2. アクティビティには複数のツアーがあります

クエリは少しハックなようです。誰かが私がこのクエリをより効率的にするのを手伝ってもらえますか?

SELECT SQL_CALC_FOUND_ROWS
    activities.activity_name,
    activities.image_path,
    activity_tours.tour_type
FROM
    activities
    LEFT JOIN activity_tours ON activities.id = activity_tours.activity_id
WHERE
    (
        activity_tours.tour_type != 17 OR (
            (SELECT count(*) FROM activity_tours WHERE activity_id = activities.id) > 1)
    )
4

1 に答える 1

0
SELECT a.activity_name,
    a.image_path,
    at.tour_type,
    MAX(at.tour_type != 17) AS tour_not_17,
    COUNT(*) AS tour_count
FROM activities a
INNER JOIN activity_tours at ON a.id = at.activity_id
GROUP BY a.activity_name, a.image_path
HAVING tour_not_17 OR tour_count > 1

tour_typeコラムをどうするかわからなかった。骨材を使用する必要がありますが、どれを使用するかわかりませんでした。おそらくあなたはできるでしょうGROUP_CONCAT()か?

于 2012-07-04T14:56:18.257 に答える