从静态JOIN TABLE移动到使用SELECT执行JOIN

时间:2012-11-20 03:22:16

标签: mysql select join syntax

我有两个表,一个用于评论(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>&nbsp;</p>
</div>
<!-- end center column include -->

2 个答案:

答案 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";