我的SQL查询中存在小问题
我的桌子
/* threads
thread_id/thread_title/thread_content
1 / any post title / welcome to my post
relations
cate_id/thread_id
1 / 1
2 / 1
categories
category_id/category_name
1 / some_cate
2 / second_cate
*/
我的SQL查询
$q = mysql_query("SELECT t.*,c.*, GROUP_CONCAT(r.cate_id SEPARATOR ' ') as cate_id
FROM threads as t
LEFT JOIN relations as r on r.thread_id = t.thread_id
LEFT JOIN categories as c on c.category_id = r.cate_id
GROUP BY r.thread_id
");
php code
while($thread = mysql_fetch_array($q)){
echo 'Post title is: ' . $thread['thread_title'] . '<br />'; // work fine
echo 'Post content is: ' . $thread['thread_content'] . '<br />'; //work fine
echo 'Categories id is : ' . $thread['cate_id'] . '/' . '<br />'; // cate_id of relations table work fine
echo 'Categories names is : ' . $thread['category_name'] . '/'; // category name of categories table don't work fine
echo '-------End of first POOOOOOOOOOOST--------';
}
输出
/*
any post title
welcome to my post
1/2
some_cate/
-------End of first POOOOOOOOOOOST-------
*/
现在我的问题是!
查询中存在小问题
有两个类别id(1和2)
应该有两个类别的名称!
some_cate / second_cate
但它只显示一个!虽然它显示两个类别id!
类别名称不重复
但类别ID重复!并且工作正常
@@ Doug Kress
我试用你的代码,但你的代码中存在mysql_fetch_array
的问题我有重复的帖子!
any post title
welcome to my post
some_cate/
any post title
welcome to my post
second_cate/
我正在使用CONCAT和GROUP BY来避免这个问题
答案 0 :(得分:0)
问题实际上在GROUP BY中 - 你告诉它按r.thread_id进行分组 - 根据你的例子,只有一个thread_id(1),所以它只返回一条记录。
我猜你根本不需要GROUP BY或GROUP_CONCAt。
SELECT t.thread_title, t.thread_content, r.cate, c.category_name
FROM threads as t
LEFT JOIN relations as r on r.thread_id = t.thread_id
LEFT JOIN categories as c on c.category_id = r.cate_id
通常最好指定您要使用的所有字段。否则,对于MySQL和PHP来说,这是不必要的工作,并且它不会使你的意图非常明确。
我不知道数据,但根据您的示例,您可以将LEFT联接更改为INNER联接。
答案 1 :(得分:0)
您必须在SELECT语句中添加GROUP_CONCAT(c.category_name, ' ') as category_name
如果您遇到具有相同列名的问题,则只需将category_name重命名为其他名称。