2つのテーブルがあります。1つはレビュー用(id、title、cover_art、text、rating、updated)で、もう1つはアーティスト用(id、artist_name)です。
レビューテーブルにアーティストIDの列があります。
今日まで、私は両方のテーブルを結合したテーブルにアクセスしただけでしたが、これにより今後問題が発生することがわかりました。
JOINコードを配置する必要がある場所の例を次に示します。
mysql_select_db($database_em, $em);
$query_getDisplay = "SELECT news.title, news.cover_art, news.blog_entry, news.rating, DATE_FORMAT(news.updated, '%M %e, %Y') AS formatted FROM news ORDER BY news.updated DESC LIMIT 1";
$getDisplay = mysql_query($query_getDisplay, $em) or die(mysql_error());
$row_getDisplay = mysql_fetch_assoc($getDisplay);
$totalRows_getDisplay = mysql_num_rows($getDisplay);
そして、これが私がそこに収めたいJOINです:
artists.artists_name
FROM news JOIN artists ON artists.id = news.artistid
しかし、それを配置する必要があると思う場所(news.ratingとそれに続くカンマ付きのDATE_FORMATの間)でページが壊れ、次のエラーが発生します。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(news.updated, '%M %e, %Y') AS formatted FROM news ORDER BY news.updated DESC LI' at line 2
これがコード全体からヘッダーにあるSQLインジェクションスイッチコードを除いたものです。news.rating、DATE_FORMAT、その他のさまざまなアイデアのすべてのインスタンスの間にJOINコードを追加してみました。また、stackoverflowのナレッジベースを調べました(これは、David Powersチュートリアルで使用したコードに基づいているため、ほとんどの場合、冗長である)
mysql_select_db($database_em, $em);
$query_getArchives = "SELECT DISTINCT DATE_FORMAT(news.updated, '%M %Y') AS archive, DATE_FORMAT(news.updated, '%Y-%m') AS link FROM news ORDER BY news.updated DESC";
$getArchives = mysql_query($query_getArchives, $em) or die(mysql_error());
$row_getArchives = mysql_fetch_assoc($getArchives);
$totalRows_getArchives = mysql_num_rows($getArchives);
mysql_select_db($database_em, $em);
$query_getRecent = "SELECT news.post_id, news.title FROM news ORDER BY news.updated DESC LIMIT 20";
$getRecent = mysql_query($query_getRecent, $em) or die(mysql_error());
$row_getRecent = mysql_fetch_assoc($getRecent);
$totalRows_getRecent = mysql_num_rows($getRecent);
mysql_select_db($database_em, $em);
$query_getDisplay = "SELECT news.title, news.cover_art, news.blog_entry, news.rating, artists.artists_name
FROM news JOIN artists ON artists.id = news.artistid, DATE_FORMAT(news.updated, '%M %e, %Y') AS formatted FROM news ORDER BY news.updated DESC LIMIT 1";
$getDisplay = mysql_query($query_getDisplay, $em) or die(mysql_error());
$row_getDisplay = mysql_fetch_assoc($getDisplay);
$totalRows_getDisplay = mysql_num_rows($getDisplay);
$var1_getDisplay2 = "-1";
if (isset($_GET['archive'])) {
$var1_getDisplay2 = $_GET['archive'];
$query_getDisplay = sprintf("SELECT news.blog_entry, news.cover_art, news.rating, DATE_FORMAT(news.updated, '%%M %%e, %%Y') AS formatted FROM news WHERE DATE_FORMAT(news.updated, '%%Y-%%m') = %s ORDER BY news.updated DESC", GetSQLValueString($var1_getDisplay2, "text"));
} elseif (isset($_GET['post_id'])) {
$var2_getDisplay3 = $_GET['post_id'];
$query_getDisplay = sprintf("SELECT news.title, news.cover_art, news.blog_entry, news.rating, DATE_FORMAT(news.updated, '%%M %%e, %%Y') AS formatted FROM news WHERE news.post_id = %s", GetSQLValueString($var2_getDisplay3, "int"));
} else {
$query_getDisplay = "SELECT news.title, news.cover_art, news.blog_entry, news.rating, DATE_FORMAT(news.updated, '%M %e, %Y') AS formatted FROM news ORDER BY news.updated DESC LIMIT 3";
}
$getDisplay = mysql_query($query_getDisplay, $em) or die(mysql_error());
$row_getDisplay = mysql_fetch_assoc($getDisplay);
$totalRows_getDisplay = mysql_num_rows($getDisplay);
?>
ところで、実際のページのコードは次のとおりです。
<!-- start center column include -->
<div class="center_column">
<div class="center_column_title">
<?php echo date('H:i:s'); ?> GMT
</div>
<div id="blog_posts">
<?php do { ?>
<h2><?php echo $row_getDisplay['title']; ?></h2>
<h3><?php echo $row_getDisplay['artists_name']; ?></h3>
<p class="cover_art"><img src="<?php echo $row_getDisplay['cover_art']; ?>" /></p>
<p class="updated">Updated <?php echo $row_getDisplay['formatted']; ?></p>
<p class="blog_entry"><?php echo nl2br($row_getDisplay['blog_entry']); ?></p>
<p class="blog_rating">Rating - <?php echo $row_getDisplay['rating']; ?> (out of a possible 1,000,000)</p>
<?php } while ($row_getDisplay = mysql_fetch_assoc($getDisplay)); ?>
</div>
<p> </p>
</div>
<!-- end center column include -->