mysql - 复杂的mysql查询可能会构建子查询

标签 mysql subquery limit

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

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

关于mysql - 复杂的mysql查询可能会构建子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18079082/

相关文章:

php - ajaxCRUD : two questions about insert

php - Laravel 多个数据库同时使用

mysql - 如何计算字符串特定位置中特定字符的出现次数 - MYSQL 5.5

mysql - 将mysql子查询变成Join

mysql - 从 2 个不同的表中选择计数,无需在子选择中进行子选择

MYSQL 到 SQL - 更新限制

mysql - 在 mysql 中将十进制值存储为 varchar 好吗?

mysql - Hippo cms 重启构建的项目

mysql - SELECT LIMIT ORDER BY 从自动递增 id 中的任意列值开始

linux - "Max open files"工作进程