如何检测选择查询中的日期是否更改

时间:2016-09-16 05:03:10

标签: php mysql sql

我正在使用以下SQL查询从内部联接中选择按 date 排序的行。

SELECT    *
FROM      clubnights 
INNER     JOIN club ON clubnights.club = club.club_ID 
WHERE     visibility = 0
AND       date >= CURDATE()
ORDER BY  clubnights.date ASC

然后我通过PHP while循环加载HTML中的所有数据。

我的目标是在任何给定日期的每个部分之上回显HTML标题。

因此,当通过select查询检测到日期更改时,我希望检测(通过PHP或SQL)。基本上,我想将最后一个'日期'列与当前列进行比较,如果它们不匹配,我将通过PHP回显一些东西。

一个例子,假设以下是行:

2016-09-16 - Row 1 // Detect 'change' here as it's the first row

2016-09-16 - Row 2

2016-09-16 - Row 3

2016-09-16 - Row 4

2016-09-16 - Row 5

2016-09-17 - Row 6 // Detect change here as date has changed

2016-09-17 - Row 7

2016-09-17 - Row 8

编辑:我正在使用MySQL

4 个答案:

答案 0 :(得分:3)

如果我理解您的要求,那么对于共享相同日期的记录组,具有最小$(function() { var docwidth = $(document).outerWidth(); var modalwidth = (docwidth > 767) ? 750 : 450; // #pscanvas is the div that wraps the canvas $("#pscanvas").width(modalwidth / 10 * 9).height(modalwidth / 10 * 9); // #psc is the canvas itself $("#psc").width(modalwidth / 10 * 9).height(modalwidth / 10 * 9); // #psc-dialog is the dialog div $("#psc-dialog").dialog({ autoOpen: false, width: modalwidth }); $("#psc-dialog").dialog("open"); }); 的记录是该组中的第一个记录。在下面的答案中,我使用子查询来查找每个日期的最小club_ID。然后将此子查询连接到原始查询,以确定每个日期的第一个记录。

club_ID

请注意,我更喜欢这个解决方案来处理PHP表示层中的问题,因为MySQL的设计目的是为了有效地处理数据,而PHP则更少。

答案 1 :(得分:2)

SELECT    *,
         CASE WHEN @dd!=date THEN 1 ELSE 0 END as changed,
         @dd:=date
FROM      clubnights, (select @dd:=null) 
    INNER JOIN club ON clubnights.club = club.club_ID 
WHERE     visibility = 0
AND       date >= CURDATE()
ORDER BY  clubnights.date ASC

您可以定义一个变量,并在行与行之间进行比较,与当前日期进行比较

答案 2 :(得分:2)

好吧,局部变量对我有帮助。使用以下方式!

  

使用php循环在表格中显示数据时,请使用以下算法

*我假设数据库已连接。

<?php
   $date2 = sortotime("today");
$q = mysql_query("select your_date_column_name as dt from your_table_name");
while($obj = mysql_fetch_object($q))
{
$date1 = $obj->dt;
if(strtotime($date1) != strtotime($date2))
{ echo "Row Changed"; echo"<br/>"; $date2 = $date1; }

echo $date1;

希望有所帮助:)

答案 3 :(得分:1)

您可以从按日期升序排序的mysql中选择数据,然后将它们与php代码进行比较,例如:

$servername = "localhost";  
$username = "username";  
$password = "password";  
$dbname = "myDB";

// Create connection  
$conn = new mysqli($servername, $username, $password, $dbname);  
// Check connection  
if ($conn->connect_error) {  
   die("Connection failed: " . $conn->connect_error);  
}   

$sql = "same as your query";  
$result = $conn->query($sql);  
$previousDate = DateTime::createFromFormat('Y-m-d', '1990-01-01');  
if ($result->num_rows > 0) {  
// output data of each row  
while($row = $result->fetch_assoc()) {  
 $mysqlDate= date('Y-m-d', $row["date"]);  
   if($previousDate != $mysqlDate)  
    {  
    echo "two different dates";  
    $previousDate = $mysqlDate;  
     }  

   }  
} else {  
echo "0 results";  
}  
$conn->close();