PHP和MySQL,这个函数有什么问题?
这个函数不起作用,我找不到问题所在,问题就在查询的某个地方PHP和MySQL,这个函数有什么问题?,php,mysql,Php,Mysql,这个函数不起作用,我找不到问题所在,问题就在查询的某个地方 function get_category_posts($category, $page, $per_page) { $start = (int)($page - 1) * $per_page; $per_page = (int)$per_page; $sql = "SELECT `posts`.`post_id` AS `id`, `posts`.`post_title` AS `title`, `posts
function get_category_posts($category, $page, $per_page) {
$start = (int)($page - 1) * $per_page;
$per_page = (int)$per_page;
$sql = "SELECT
`posts`.`post_id` AS `id`,
`posts`.`post_title` AS `title`,
`posts`.`post_category` AS `category`,
`posts`.`post_body` AS `preview`,
`posts`.`post_user` AS `user`,
DATE_FORMAT(`posts`.`post_date`, '%Y-%m-%d %H:%i:%s') AS `date`,
`comments`.`total_comments`,
DATE_FORMAT(`comments`.`last_comment`, '%Y-%m-%d %H:%i:%s') AS `last_comment`
FROM `posts`
WHERE `category`='".$category."'
LEFT JOIN (
SELECT
`post_id`,
COUNT(`comment_id`) AS `total_comments`,
MAX(`comment_date`) AS `last_comment`
FROM `comments`
GROUP BY `post_id`
) AS `comments`
ON `posts`.`post_id` = `comments`.`post_id`
ORDER BY `posts`.`post_date` DESC
LIMIT {$start}, {$per_page}";
$posts = mysql_query($sql);
//die(mysql_error());
$rows = array();
while (($row = mysql_fetch_assoc($posts)) !== false) {
$rows[] = array(
'id' => $row['id'],
'title' => html_entity_decode($row['title']),
'category' => html_entity_decode($row['category']),
'preview' => html_entity_decode($row['preview']),
'user' => html_entity_decode($row['user']),
'date' => $row['date'],
'total_comments' => ($row['total_comments'] === null) ? 0 : $row['total_comments'],
'last_comment' => ($row['last_comment'] === null) ? 'aldrig' : $row['last_comment']
);
}
return $rows;
}
函数在没有WHEREcategory='.$category'的情况下可以正常工作,但是,它返回
您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解第12行中使用“左连接选择post\u id,COUNTcomment\u id作为total\u comments”的正确语法
WHERE子句必须位于表联接之后、ORDER BY和LIMIT之前
SELECT <column list>
FROM <table>
JOIN <table> USING (<column>)
WHERE <condition>
OR <condition>
AND <condition>
GROUP BY <column list>
HAVING <expression>
连接必须在WHERE条件之前出现
$sql = "SELECT
`posts`.`post_id` AS `id`,
`posts`.`post_title` AS `title`,
`posts`.`post_category` AS `category`,
`posts`.`post_body` AS `preview`,
`posts`.`post_user` AS `user`,
DATE_FORMAT(`posts`.`post_date`, '%Y-%m-%d %H:%i:%s') AS `date`,
`comments`.`total_comments`,
DATE_FORMAT(`comments`.`last_comment`, '%Y-%m-%d %H:%i:%s') AS `last_comment`
FROM `posts`
LEFT JOIN (
SELECT
`post_id`,
COUNT(`comment_id`) AS `total_comments`,
MAX(`comment_date`) AS `last_comment`
FROM `comments`
GROUP BY `post_id`
) AS `comments`
ON `posts`.`post_id` = `comments`.`post_id`
WHERE `posts`.`category`='".$category."'
ORDER BY `posts`.`post_date` DESC
LIMIT {$start}, {$per_page}";
如果我把它放在连接之后,我会得到这样一个结果:“where子句”中的未知列“category”,这是因为category不在表中-它只是一个列别名,请尝试使用posts.post_category代替headi得到这个结果:“where子句”中的未知列“category”。