Php 修复hackishsqlwhere子句

Php 修复hackishsqlwhere子句,php,mysql,where-clause,where,Php,Mysql,Where Clause,Where,我有两张表,活动和活动之旅活动有许多活动之旅,并且与活动相关。id活动之旅。活动之旅id。我编写了以下SQL来选择两个表中具有两个条件之一的行 如果有特定的活动\u游览。游览类型或 该活动有多个巡演 这个问题似乎有点陈词滥调。有人能帮我提高这个查询的效率吗 SELECT SQL_CALC_FOUND_ROWS activities.activity_name, activities.image_path, activity_tours.tour_type FROM

我有两张表,
活动
活动之旅
<代码>活动有许多
活动之旅
,并且与
活动相关。id
活动之旅。活动之旅id
。我编写了以下SQL来选择两个表中具有两个条件之一的行

  • 如果有特定的
    活动\u游览。游览类型
  • 该活动有多个巡演
  • 这个问题似乎有点陈词滥调。有人能帮我提高这个查询的效率吗

    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)
        )
    

    不知道如何处理
    tour\u type
    列;应该使用聚合,但我不知道是哪一个。也许您可以执行
    GROUP\u CONCAT()

    请为相关表添加create sql语句。这将有助于更好地理解数据模型!
    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