2009-08-05 30 views
2

私はリストブックを含むいくつかのテーブルを持つ "bookfeather"というMySQLデータベースを持っています。各表の下に、各本には一定の投票数があります。以下のPHPコードでは、ユーザは書籍のタイトル($ entry)を入力してから、すべてのテーブル($ sum)にある書籍の総投票数を返します。MySQLデータベース内の複数のテーブルから値を取得する

PHPを使用して、$ sum(降順)の中で最も高い値を持つデータベース内の25冊の書籍をリストする2列、25行のテーブルを作成するにはどうすればよいですか?事前に

おかげで、

ジョン

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

テーブルや名前がいくつあるのか分かりませんか? –

+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があいまいになりますので、上記のクエリは完全に動作しないことを実現しています。また、おそらく1つのテーブル内にあるレコードを取得する結合を実行する必要があるためです。クエリが完璧ではないかもしれないが、コンセプトが正しい方向だと思う。あなたが "total_votes_upとしてSUM(tableA .votes_up)+ SUM(tableB .votes_up)"

+0

また、selectステートメントでサイトを取得して2番目の列を作成することもできます –

+0

これはテーブルを生成しないことに注意してください。結果を返すクエリが生成されます。つまり、テーブルを生成するよりも優れたソリューションだと思います。この新しい情報を表として表示したい場合は、すべてのデータが派生しているので、代わりにビューとして表示することができます。いずれにしても、+1 –

+0

私は彼がhtmlテーブルを望んでいると思っていました...ビュー(またはデータベーステーブル)が必要な場合は、そのクエリを継続的に実行してデータを最新の状態に保ち、 –

1

を $ selectStatement =のような何かを行うことができます

私は最近、このような何かをしました。あなたのデータベースでは、(TaleofTwoCities.phpのように)各フィールドの名前を対応するbook.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で終わることを覚えていることを覚えておいてください - あなたは2番目に理由を見るでしょう)、そしてあなたの投票を記録するフィールドであるカウンター。

は、2番目のengine.phpファイルを作成し、このような何かを追加:あなたはこの両方のための25とエンジンに到達するまでに、1

今...

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

などをご結果ページでは、身体の先頭にrequire_once(engine.php)とrequire_once(engine2.php)を入れた後、HTMLテーブルを開始します。それは、$ NUM1が異なるに変更され、「book1.php」を使用して、フィールドに名前を付けるとエンジンを含むことで

...のような
<table border=1 cellspacing=0 cellpadding=0> 
<tr> 
<?php include $num1; ?> 
</tr> 
<tr> 
<?php include $num2; ?> 
</tr> 

のように...何だろうので、あなただけの、2つの列をしたいです.phpファイルは、投票の高低に応じて異なります。

<td style="width:650px;"><center><img src="images/book1.jpg" alt="" border="none" 
/></a></center></td> 
<td style="width:150px;">Votes:&nbsp;<?php echo $vnum1;?></td> 

そしてそこにあなたがそれを持っているが:あなたはすでにhtmlコードの途中に挿入しているので、ヘッダか何かがない - 今あなたがしなければならないすべてはこれのように各書籍のために小さなPHPファイルを作成しています。各書籍の投票数に応じて、動的に高い結果から低い結果が得られるコード。

関連する問題