首页 文章

仅根据月份和年份选择mySQL

提问于
浏览
74

我的mySQL数据库中有一列有一些行 . 其中一行是DATE,如下所示: 2012-02-01

我想要实现的是仅使用基于年份和月份的PHP进行SELECT .

SELECT的逻辑如下:

$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";

具体的月份和年份将从 $_POST 变量传递,如 $_POST['period']="2012-02";

我该怎么做?

10 回答

  • 1
    SELECT * FROM projects WHERE YEAR(Date) = 2011 AND MONTH(Date) = 5
    
  • 169

    如果你有

    $_POST['period'] = "2012-02";
    

    首先,找到每月的第一天:

    $first_day = $_POST['period'] . "-01"
    

    然后这个查询将使用 Date 上的索引,如果你有一个:

    $q = "
        SELECT *  
        FROM projects 
        WHERE Date BETWEEN '$first_day' 
                       AND LAST_DAY( '$first_day' )
         " ;
    

    也可以使用包容性排他间隔,这种间隔效果非常好(如果列是 DATEDATETIMETIMESTAMP ,也不必担心精度:

    $q = "
        SELECT *  
        FROM projects 
        WHERE Date >= '$first_day' 
          AND Date  < '$first_day' + INTERVAL 1 MONTH 
         " ;
    

    Security warning:

    您应该正确地转义这些值或使用预准备语句 . 简而言之,使用PHP中推荐的任何方法,以避免任何SQL注入问题 .

  • 1

    干得好 . 将计算保留给PHP并保存数据库一些工作 . 这样,您可以有效地使用 Date 列上的索引 .

    <?php
        $date = $_POST['period'];
    
        $start = strtotime($date);
        $end   = strtotime($date . ' 1 month - 1 second');
    
        $query = sprintf(
            'SELECT *
               FROM projects
              WHERE Date BETWEEN FROM_UNIXTIME(%u) AND FROM_UNIXTIME(%u)',
            $start,
            $end
        );
    

    EDIT
    忘记了Unix时间戳转换 .

  • -1
    $q="SELECT * FROM projects WHERE YEAR(date) = 2012 AND MONTH(date) = 1;
    
  • 18

    在这里,通过MONTH和DATE在mySQL中查找记录

    这是你的POST值 $_POST['period']="2012-02";

    只是,用破折号爆炸 Value $Period = explode('-',$_POST['period']);

    从爆炸值中获取数组:

    Array ( [0] => 2012 [1] => 02 )

    在SQL Query中输入值:

    SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';

    获得MONTH和YEAR的结果 .

  • 8

    你可以这样做:

    $q="SELECT * FROM projects WHERE Year(Date) = '$year' and Month(Date) = '$month'";
    
  • 3

    逻辑将是:

    SELECT * FROM objects WHERE Date LIKE '$_POST[period]-%';
    

    LIKE 运算符将选择以 $_POST['period'] 开头的所有行,后跟破折号和mont的日期

    http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - 一些其他信息

  • 2

    从日期列中获取月份和年份值

    select year(Date) as "year", month(Date) as "month" from Projects
    
  • 4

    这是我使用的查询,它将在一个句点内返回每个记录作为总和 .

    这是代码:

    $result = mysqli_query($conn,"SELECT emp_nr, SUM(az) 
    FROM az_konto 
    WHERE date BETWEEN '2018-01-01 00:00:00' AND '2018-01-31 23:59:59' 
    GROUP BY emp_nr ASC");
    
    echo "<table border='1'>
    <tr>
    <th>Mitarbeiter NR</th>
    <th>Stunden im Monat</th>
    </tr>";
    
    while($row = mysqli_fetch_array($result))
    {
    $emp_nr=$row['emp_nr'];
    $az=$row['SUM(az)'];
    echo "<tr>";
    echo "<td>" . $emp_nr . "</td>";
    echo "<td>" . $az . "</td>";
    echo "</tr>";
    }
    echo "</table>";
    $conn->close();
    ?>
    

    这列出了每个emp_nr以及它们累积的每月小时数之和 .

  • 0

    是的,这是有效的,但它只返回一行,而有几行只能使用选定的列进行检索 . 与SELECT Title一样,Date FROM mytable WHERE YEAR(Date)= 2017 AND MONTH(Date)= 09仅返回一行 .

相关问题