我有两个表,一个用于评论(id,title,cover_art,text,rating,updated),另一个用于艺术家(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);
?>
BTW这是实际页面中的代码:
<!-- 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 -->
答案 0 :(得分:0)
我建议如果你的表是关系的,那么使用外键到另一个表主键,这样你就可以使用查询连接表....
但你仍然可以加入这个表......
$ query =“SELECT * FROM Review LEFT OUTER JOIN Artist”; 无论如何,让我看看网站......:D
答案 1 :(得分:0)
这里有2个FROM子句:
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";
将其更改为:
mysql_select_db($database_em, $em);
$query_getDisplay = "SELECT news.title, news.cover_art, news.blog_entry, news.rating, artists.artists_name, DATE_FORMAT(news.updated, '%M %e, %Y') AS formatted
FROM news JOIN artists ON artists.id = news.artistid ORDER BY news.updated DESC LIMIT 1";