显示正确的数据

时间:2014-04-01 13:25:49

标签: php mysql database

我正在构建一个博客并查看我使用的每个帖子:

post.php?id=<?php echo $row_post['id']; ?>

Post是我的数据库中的一个表。

$colname_post = "-1";
if (isset($_GET['postid'])) {
  $colname_post = $_GET['postid'];
}

mysql_select_db($database_connect, $connect);
$query_post = sprintf("SELECT postid, title, DATE_FORMAT(date,'%%d.%%m.%%Y') AS date, idcategory, text FROM post WHERE postid = %s", GetSQLValueString($colname_post, "int"));;
$post = mysql_query($query_post, $connect) or die(mysql_error());
$row_post = mysql_fetch_assoc($post);
$totalRows_post = mysql_num_rows($post);

我在显示不在post表中的数据时遇到问题。例如,在标题下,我想显示类别。类别是一个单独的表。它们之间的关系是一个类别可以连接到许多帖子,但是一个帖子只能有一个类别。它们与categoryID(外键)连接。如果您需要查看show create table,请注释。

因此,虽然正确显示了post表中的所有数据,但其他表中的数据(即不包含postid作为attrubute的表)则不是。例如

<h1><?php echo $row_post['title']; ?></h1> <-- correct value displayed
<p><?php echo $row_category['name']; ?></p> <-- not correct

有关如何解决此问题的任何建议吗?

2 个答案:

答案 0 :(得分:2)

您需要加入

select p.title, c.name from post p
inner join category c on c.categoryID = p.categoryID

您可以根据需要在select语句中添加更多列。

更新

这是您的查询应该是这样的

SELECT 
p.postid, 
c.name,
p.title, 
DATE_FORMAT(p.date,'%%d.%%m.%%Y') AS date, 
p.idcategory, 
p.text 
FROM post p 
inner join category c on c.categoryID = p.idcategory 
WHERE p.postid = %s

我为表名p和c创建了帖子和类别的别名,因此请检查此查询 如果选择是从适当的表格完成的。

答案 1 :(得分:0)

您可以使用JOIN子句在SQL中处理多个表。

有关此内容的详情,请访问:http://dev.mysql.com/doc/refman/5.0/en/join.html