复杂的mysql查询可能会生成子查询

复杂的mysql查询可能会生成子查询,mysql,subquery,limit,Mysql,Subquery,Limit,在我的例子中,我有来自多个表的数据,我想提取一个查询。这是关于足球统计的。一分钟内,表格记录了比赛日期,另一分钟记录了比赛数据和结果。 问题是我想限制日期的应用,而不是比赛的数量,因为一天中有几场比赛。 设法构建了一个复杂的查询来显示我的所有数据,但它显示的结果是游戏数量而不是日期,因此我不能使用限制,因为在这种情况下,吃饭会变成更多的游戏而不是日期。 我的问题是,是否可以构建一个对日期有限制的应用程序,同时显示日期中所有比赛的结果? 下面是我现在使用的应用程序的代码: SELECT

在我的例子中,我有来自多个表的数据,我想提取一个查询。这是关于足球统计的。一分钟内,表格记录了比赛日期,另一分钟记录了比赛数据和结果。 问题是我想限制日期的应用,而不是比赛的数量,因为一天中有几场比赛。 设法构建了一个复杂的查询来显示我的所有数据,但它显示的结果是游戏数量而不是日期,因此我不能使用限制,因为在这种情况下,吃饭会变成更多的游戏而不是日期。 我的问题是,是否可以构建一个对日期有限制的应用程序,同时显示日期中所有比赛的结果? 下面是我现在使用的应用程序的代码:

SELECT
            MAIN.id,
            SECTION.type,
            MAIN.date as date_,
            MAIN.prognosis,
            HOME_TEAM.team_name as home_team,
            GUEST_TEAM.team_name as guest_team,
            FIRST_INDEX.index as f_index,
            SECOND_INDEX.index as s_index,
            THIRD_INDEX.index as t_index,
            DATA.home_result,
            DATA.guest_result,
            DATA.coefficient,
            DATA.success,
            MAIN.total_coefficient,
            MAIN.total_success

        FROM ssdt_matches_main as MAIN

        LEFT JOIN ssdt_section_type as SECTION ON (MAIN.type_id = SECTION.id)
        LEFT JOIN ssdt_matches_data as DATA ON (DATA.matches_main_id = MAIN.id )
        LEFT JOIN ssdt_matches_teams as HOME_TEAM ON (HOME_TEAM.id = DATA.home_team_id )
        LEFT JOIN ssdt_matches_teams as GUEST_TEAM ON (GUEST_TEAM.id = DATA.guest_team_id )
        LEFT JOIN ssdt_matches_index as FIRST_INDEX ON (FIRST_INDEX.id = DATA.first_index_id )
        LEFT JOIN ssdt_matches_index as SECOND_INDEX ON (SECOND_INDEX.id = DATA.second_index_id )
        LEFT JOIN ssdt_matches_index as THIRD_INDEX ON (THIRD_INDEX.id = DATA.third_index_id ) 


        WHERE SECTION.type = 'Risk prognosis'


        ORDER BY MAIN.id DESC

您希望限制
where
子句中的日期,如:

where MAIN.date between date('2012-01-01') and date('2012-12-31');
如果您想从(比如)最近10天(通过匹配)中获取记录,可以执行以下操作:

select . . .
from . . . join
     (select date
      from ssdt_matches_main md
      group by date
      order by date desc
      limit 10
     ) datel
     on datel.date = MAIN.date
这将使用联接选择日期列表,然后使用联接进行筛选

编辑:

您的
from
子句如下所示:

    FROM ssdt_matches_main as MAIN

    LEFT JOIN ssdt_section_type as SECTION ON (MAIN.type_id = SECTION.id)
    LEFT JOIN ssdt_matches_data as DATA ON (DATA.matches_main_id = MAIN.id )
    LEFT JOIN ssdt_matches_teams as HOME_TEAM ON (HOME_TEAM.id = DATA.home_team_id )
    LEFT JOIN ssdt_matches_teams as GUEST_TEAM ON (GUEST_TEAM.id = DATA.guest_team_id )
    LEFT JOIN ssdt_matches_index as FIRST_INDEX ON (FIRST_INDEX.id = DATA.first_index_id )
    LEFT JOIN ssdt_matches_index as SECOND_INDEX ON (SECOND_INDEX.id = DATA.second_index_id )
    LEFT JOIN ssdt_matches_index as THIRD_INDEX ON (THIRD_INDEX.id = DATA.third_index_id ) 
    join (select date
          from ssdt_matches_main md
          group by date
          order by date desc
          limit 10
         ) datel
         on datel.date = MAIN.date
我修正了这个问题。 没有你的帮助我是不会做这件事的。 多谢各位

SELECT
            MAIN.id,
            SECTION.type,
            MAIN.date as date_,
            MAIN.prognosis,
            HOME_TEAM.team_name as home_team,
            GUEST_TEAM.team_name as guest_team,
            FIRST_INDEX.index as f_index,
            SECOND_INDEX.index as s_index,
            THIRD_INDEX.index as t_index,
            DATA.home_result,
            DATA.guest_result,
            DATA.coefficient,
            DATA.success,
            MAIN.total_coefficient,
            MAIN.total_success

        FROM ssdt_matches_main as MAIN

LEFT JOIN ssdt_section_type as SECTION ON (MAIN.type_id = SECTION.id)
LEFT JOIN ssdt_matches_data as DATA ON (DATA.matches_main_id = MAIN.id )
LEFT JOIN ssdt_matches_teams as HOME_TEAM ON (HOME_TEAM.id = DATA.home_team_id )
LEFT JOIN ssdt_matches_teams as GUEST_TEAM ON (GUEST_TEAM.id = DATA.guest_team_id )
LEFT JOIN ssdt_matches_index as FIRST_INDEX ON (FIRST_INDEX.id = DATA.first_index_id )
LEFT JOIN ssdt_matches_index as SECOND_INDEX ON (SECOND_INDEX.id = DATA.second_index_id )
LEFT JOIN ssdt_matches_index as THIRD_INDEX ON (THIRD_INDEX.id = DATA.third_index_id ) 
JOIN (SELECT id
      FROM ssdt_matches_main md
      WHERE type_id = 2
      ORDER BY id DESC
      LIMIT 0,5
     ) datel
     ON datel.id = DATA.matches_main_id


        ORDER BY MAIN.id DESC

我想限制数据的日期数,而不是从到的日期。类似于极限0,50@user2656529 . . . 如果你想限制一个给定的日期数,那么第二个版本应该可以。我想我理解我提出的解决方案的逻辑。我将尝试返回一个结果。我不明白的是在何处插入此连接以及其他连接保留在何处。这是有点困惑的地方。。。我没有做过子查询这不起作用,也没有给我预期的结果。我注意到的第一件事是日期字段不在这个表“ssdt_matches_data”中,而是在另一个表“ssdt_matches_main”中。按照这种方式,我希望对框进行排序的是ID字段,而不是日期字段。有些事我不能让它工作properly@user2656529 . . . 您能否编辑您的问题以提供样本数据和期望的结果?我可能没有正确理解这个问题。