我正在使用以下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
答案 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();