gpt4 book ai didi

php - 按时间倒序从多个表中打印唯一值

转载 作者:行者123 更新时间:2023-11-29 15:09:05 26 4
gpt4 key购买 nike

我有一个包含多个表的 MySQL 数据库,每个表都有相同的结构。其结构为:

id INT(11) NOT NULL auto_increment, site VARCHAR(350) NOT NULL, votes_up BIGINT(9) NOT NULL, votes_down BIGINT(9) NOT NULL, PRIMARY KEY(id), UNIQUE (site)

下面的 PHP 代码打印出所有表中的每个唯一“站点”,并对所有表中的“votes_up”求和。然后,它按降序列出“site”的前 25 个值(基于“votes_up”总数)。

这段代码工作得很好,但我想根据创建时间按时间倒序顺序做完全相同的事情。我该怎么做?

提前致谢,

约翰

<?

mysql_connect("mysqlv10", "username", "password") or die(mysql_error());
mysql_select_db("bookfeather") or die(mysql_error());

$result = mysql_query("SHOW TABLES");
$tables = array();
while ($row = mysql_fetch_assoc($result)) {
$tables[] = '`'.$row["Tables_in_bookfeather"].'`';

}

//$subQuery = "SELECT site, votes_up FROM ".implode(" UNION ALL SELECT site, votes_up FROM ",$tables);

$subQueryParts = array();
foreach($tables as $table)
$subQueryParts[] = "SELECT site, votes_up FROM $table WHERE LENGTH(site)";
$subQuery = implode(" UNION ALL ", $subQueryParts);

// Create one query that gets the data you need
$sqlStr = "SELECT site, sum(votes_up) sumVotesUp
FROM (
".$subQuery." ) subQuery
GROUP BY site ORDER BY sum(votes_up) DESC LIMIT 25";
$result = mysql_query($sqlStr);

$arr = array();
echo "<table class=\"samples2\">";
while ($row = mysql_fetch_assoc($result)) {
echo '<tr>';
echo '<td class="sitename2"><a href="booklookup3.php?entry='.urlencode($row["site"]).'&searching=yes&search=search">'.$row["site"].'</a></td>';
echo '<td>'.$row["sumVotesUp"].'</td>';
echo '</tr>';
}

echo "</table>";


?>

最佳答案

正如评论中所述,您必须添加一列来存储创建行的时间。如果您要存储 UNIX 时间戳,则该列的类型可以是 INT;如果您希望使用日期字符串,则该列的类型可以是 DATETIME。另外,如果您不想这样做,您可以使用ORDER BY id DESC,因为自动增量列最常见对应于时间顺序,但事实并非如此一个稳定的解决方案,因为当 AUTO_INCRMENT 值超出 INT 数据类型的范围时,它开始使用未使用的值(例如来自已删除的行)。

关于php - 按时间倒序从多个表中打印唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1332309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com