Ters kronolojik sırayla Çeşitli Tablolardan Benzersiz Değerler üzerinden yazdırma

1 Cevap php

Ben aynı yapıya sahip, her biri, birden fazla tablo ile MySQL veritabanı var. Yapısı şu şekildedir:

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)

Aşağıdaki PHP kodu tüm tablolar genelinde her benzersiz "site" yazdırır ve tüm tablolardan o vardır "votes_up" özetliyor. Daha sonra azalan (toplam "votes_up" dayalı) "site" için ilk 25 değerlerini listeler.

Bu kod harika çalışıyor, ama ben ters kronolojik zaman dayalı oluşturun aynı şeyi yapmak istiyorum. Bunu nasıl yaparsınız?

Teşekkür peşin,

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 Cevap

Yorum dedi gibi, satır oluşturulduğu zaman saklamak istiyorsunuz bir sütun eklemek gerekir. Bu sütun türü INT olabilir size tarih dizeleri kullanmak isterseniz UNIX zaman veya DATETIME saklamak için gidiyoruz. Ayrıca bunu yapmak istemiyorsanız, otomatik artış kolonlar most often kronolojik karşılık, çünkü sen, ORDER BY id DESC kullanabilirsiniz, ancak, çünkü zaman, istikrarlı bir çözüm değil AUTO_INCREMENT değeri INT veri türü, kullanılmayan değerlerini (örn. silinen satırlar itibaren) kullanmaya başlar aralık biterse.