Распечатка уникальных значений из нескольких таблиц в обратном хронологическом порядке - PullRequest
0 голосов
/ 26 августа 2009

У меня есть база данных 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-код распечатывает каждый уникальный «сайт» из всех таблиц и суммирует значение «voice_up» из всех таблиц. Затем он перечисляет 25 лучших значений для «сайта» (на основе общего значения «voice_up») в порядке убывания.

Этот код прекрасно работает, но я бы хотел сделать то же самое, основываясь на времени создания в обратном хронологическом порядке. Как мне это сделать?

Заранее спасибо,

John

<?

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>";


?>

1 Ответ

1 голос
/ 26 августа 2009

Как сказано в комментариях, вам нужно будет добавить столбец, в котором будет храниться время создания строки. Этот столбец может иметь тип INT, если вы собираетесь хранить метки времени UNIX, или DATETIME, если вы хотите использовать строки даты. Кроме того, если вы не хотите этого делать, вы можете использовать ORDER BY id DESC, поскольку столбцы с автоинкрементом чаще всего соответствуют хронологическому порядку, но это не является стабильным решением, потому что когда AUTO_INCREMENT значение выходит за пределы диапазона типа данных INT, оно начинает использовать неиспользуемые значения (например, из удаленных строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...