我有一个名为“bookfeather”的MySQL数据库,其中包含几个包含列表簿的表。在每张表下,每本书都有一定数量的投票。下面的PHP代码允许用户输入书名($ entry),然后返回书籍在所有表格中的总票数($ sum)。
我怎样才能使用PHP制作一个2列25行的表格,列出数据库中25个具有最高$ sum值的书籍(按降序排列)?
提前致谢,
约翰
mysql_connect("mysqlv10", "username", "password") or die(mysql_error());
mysql_select_db("bookfeather") or die(mysql_error());
// We preform a bit of filtering
$entry = strip_tags($entry);
$entry = trim ($entry);
$entry = mysql_real_escape_string($entry);
$result = mysql_query("SHOW TABLES FROM bookfeather")
or die(mysql_error());
$table_list = array();
while(list($table)= mysql_fetch_row($result))
{
$sqlA = "SELECT COUNT(*) FROM `$table` WHERE `site` LIKE '$entry'";
$resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
list($isThere) = mysql_fetch_row($resA);
$isThere = intval($isThere);
if ($isThere)
{
$table_list[] = $table;
}
}
//$r=mysql_query("SELECT * , votes_up - votes_down AS effective_vote FROM `$table[0]` ORDER BY effective_vote DESC");
if(mysql_num_rows($resA)>0){
foreach ($table_list as $table) {
$sql = "SELECT votes_up FROM `$table` WHERE `site` LIKE '$entry'";
$sql1 = mysql_query($sql) or die("$sql:".mysql_error());
while ($row = mysql_fetch_assoc($sql1)) {
$votes[$table] = $row['votes_up'];
$sum += $row['votes_up'];
//echo $table . ': "' . $row['votes_up'] . " for $entry from $table\"<br />";
}
}
}
else{
print "<p class=\"topic2\">the book \"$entry\" has not been added to any category</p>\n";
}
//within your loop over the DB rows
//$votes[$table] = $row['votes_up'];
//afterwards
if($sum>0){
print "<table class=\"navbarb\">\n";
print "<tr>";
print "<td class='sitenameb'>".'<a type="amzn" category="books" class="links2b">'.$entry.'</a>'."</td>";
print "</tr>\n";
print "</table>\n";
//echo "<p class=\"topic3\">".'<a href="http://'.$entry.'" class="links3">'.$entry.'</a>'. "</p>\n";
echo "<p class=\"topic4\">". number_format($sum) . ' votes in total.'."</p>\n";
答案 0 :(得分:1)
尝试这样的事情。所有这些都没有经过测试,所以请添加更改注释。我会和你合作以获得正确的代码。
// After getting your array of tables formated like
$tableArray = array("`tableA`", "`tableB`", "`tableC`");
// create a table statement
$tableStatement = implode(", ", $tableArray);
// create a join statement
$joinStatement = "";
for ($i = 1; $i < count($tableArray); $i++) {
if ($joinStatement != "")
$joinStatement .= " AND ";
$joinStatement .= $tableArray[0] . ".site = " . $tableArray[$i] . ".site"
}
$firstTable = $tableArray[0];
$sql = "SELECT SUM(votes_up) FROM " . $tableStatement . " WHERE " . $joinStatement . " AND " . $firstTable . ".site LIKE '" . $entry . "' GROUP BY " . $firstTable . ".site ORDER BY SUM(votes_up) DESC";
编辑-------- 我现在意识到上面的查询将无法正常工作,因为votes_up将是不明确的。另外,因为您可能希望进行连接以获取仅在一个表中的记录。我认为这个概念是正确的方向,即使查询可能不完美。
你可以做点什么
$ selectStatement =“SUM(tableA
。votes_up)+ SUM(tableB
。votes_up)as total_votes_up”
答案 1 :(得分:1)
我最近做了类似的事情。在您的数据库中,您必须将每个字段重命名为相应的book name.php,如(TaleofTwoCities.php)。现在在您的页面上将显示投票结果,您需要包含一些将在每次加载时驱动数据库查询的php文件。我称之为“engine1.php”和“engine2.php”。这些将为您完成所有排序。
$query1 = mysql_fetch_row(mysql_query("SELECT url FROM pages ORDER BY counter DESC
LIMIT 0,1"));
$query2 = mysql_fetch_row(mysql_query("SELECT url FROM pages ORDER BY counter DESC
LIMIT 1,1"));
$query3 = mysql_fetch_row(mysql_query("SELECT url FROM pages ORDER BY counter DESC
LIMIT 2,1"));
依旧......然后..
$num1 = "$query1[0]";
$num2 = "$query2[0]";
$num3 = "$query3[0]";
该部分按照从最高到最低的投票数对您的列表进行排序,在您的情况下,url是书籍的名称(记住您希望它以.php结尾 - 你会在一秒钟内看到原因) ),并且反击是记录你的投票的领域。
制作你的第二个engine.php文件并添加如下内容:
$vquery1 = mysql_fetch_row(mysql_query("SELECT counter FROM pages WHERE
url='book1.php'"));
$vquery2 = mysql_fetch_row(mysql_query("SELECT counter FROM pages WHERE
url='book2.php'"));
$vnum1 = "$vquery1[0]";
$vnum2 = "$vquery2[0]";
等等......直到你和引擎1都达到25。
现在,在结果页面中,在身体开始处输入require_once(engine.php)和require_once(engine2.php)后,启动HTML表格。你只想要两列,所以它就像......
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<?php include $num1; ?>
</tr>
<tr>
<?php include $num2; ?>
</tr>
等等......通过用“book1.php”命名你的字段并包含引擎,$ num1将根据从高到低的投票变为另一个.php文件。现在你所要做的就是为每本书制作小的php文件 - 没有标题或任何东西,因为你已经将它插入到html代码的中间了:
<td style="width:650px;"><center><img src="images/book1.jpg" alt="" border="none"
/></a></center></td>
<td style="width:150px;">Votes: <?php echo $vnum1;?></td>
你有它。一个代码,它将动态地为您提供从高到低的结果,具体取决于每本书的投票数。