2009-08-26 3 views
0

で複数テーブルからの固有の値をプリントアウト私は同じ構造を持っているそれぞれの複数のテーブルを持つ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」を合計します。次に、「サイト」の上位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>"; 


?> 
+0

ええと...どのようにあなたはどのような種類の日付を持っていないとき「年表」を決定しようとしている(私が見ることができる...私は盲目のですか?) – kolosy

+0

あなたが正しいです...私は必要ですか何らかの形で「サイト」に日付スタンプを追加するには?別のクエリで 、私が新しい順に作成したテーブルを表示するにはINFORMATION_SCHEMA.TABLESとCREATE_TIMEを使用しています...ここにいることを使用する方法はありますか? – John

+0

いいえ、テーブル行はINFORMATION_SCHEMAに記録されません。 –

答えて

1

としては、あなたが行が作成された時刻を格納します列を追加する必要があります、コメントで述べています。あなたは日付文字列を使用したい場合は、UNIXタイムスタンプやDATETIMEを保存しようとしている場合は、この列には、タイプINTのものとすることができます。また、あなたがそれを行うにはしたくない場合は、自動インクリメント列は、ほとんどの場合、が年代順に対応ので、あなたは、ORDER BY id DESCを使用できますが、AUTO_INCREMENT値の範囲を使い果たしたとき、そのためには、安定した解決策ではありませんINTデータ型では、未使用の値(削除された行など)の使用が開始されます。

関連する問題