Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按未按日期正确排序分组_Mysql - Fatal编程技术网

Mysql 按未按日期正确排序分组

Mysql 按未按日期正确排序分组,mysql,Mysql,我有一个查询,按最新新闻故事的顺序列出主题公园。查询如下 $sql2 = 'SELECT tpf_news.park_id, name FROM tpf_news INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id GROUP BY name ORDER BY date DESC ' ; $result2 = $pdo->query($sql2); 在一个主题公园有多个新闻故事之前,它一直运作良好,被分组的日期是较旧的

我有一个查询,按最新新闻故事的顺序列出主题公园。查询如下

$sql2 = 'SELECT tpf_news.park_id, name
FROM tpf_news
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id GROUP BY name ORDER BY date DESC ' ;
$result2 = $pdo->query($sql2);
在一个主题公园有多个新闻故事之前,它一直运作良好,被分组的日期是较旧的日期,而不是较新的日期,因此主题公园将保持其原始位置,而不是在附加新故事时跳到列表的顶部。如何更改查询以便按最近的日期进行分组

如果需要,下面是显示数据的php foreach

<?php foreach ($result2 as $row2): ?>
<h4>
<a class="bloglink" href="parknews.php?park_id=<?php echo $row2['park_id'];?>">
<?php echo $row2['name']; ?>
</a>
</h4>
<br>


<?php endforeach; ?>



谢谢,您没有选择日期,因此基本上它将使用“随机”日期。您可以尝试如下选择:

SELECT MAX(date) thedate, tpf_news.park_id, name
FROM tpf_news
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id GROUP BY name ORDER BY thedate DESC
这将选择每个组中最大的日期(名称),然后按这些日期排序。

我刚刚计算出:

$sql2 = 'SELECT tpf_news.park_id, name
FROM tpf_news
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id GROUP BY name 

ORDER BY min(STR_TO_DATE(date, "%Y-%m-%d"))'
这似乎很管用。 谢谢


希望这会有帮助。

日期的数据类型是什么?您将希望按日期按降序排序,以最新的日期排在第一位。如果您的日期字段不是日期类型,请将其转换为:
orderbystru\u TO_date(date)DESC
数据类型为date。在一个主题公园有两次约会之前,一切都在进行中。我必须对结果进行分组,因为每个公园应该只在列表中列出一次,如果数据类型为“日期”,则将其改为“日期时间”。在GROUPBY子句中也使用Auto increment或PK。您使用的
GROUPBY
在SQL中是非法的,但MySQL不会拒绝它(就像所有其他DBMS一样)-它只是返回随机结果。详情见此:日期实际上不会显示,只是公园名称。date DESC只是为了获得正确的订单是的,但是您仍然需要指定您想要的是最新的日期,因为这是您想要比较的日期。你不必在你的
foreach
中使用它。如果你的数据的顺序是正确的,mysql在列中的顺序是正确的,最新的条目具有最高的日期,那么这就行了。然而,如果这变得不一致,你只会得到每个分组的随机日期。
SELECT tpf_news.park_id, name
FROM tpf_news
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id 
GROUP BY name ORDER BY date DESC, **(AutoIncrement_Field)** DESC