2009-08-26 2 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 시간 소인을 저장하려면이 열의 유형은 INT이거나 날짜 문자열을 사용하려면 DATETIME 일 수 있습니다. 또한 자동 입력 열 이 가장 자주 나타나는 경우이 시간 순서에 해당하기 때문에 AUTO_INCREMENT 값이 범위를 벗어날 때 안정적인 해결책이 아니기 때문에 ORDER BY id DESC을 사용할 수 있습니다. 데이터 유형이 INT 인 경우 사용되지 않은 값 (예 : 삭제 된 행)을 사용하기 시작합니다.