mysql查询中的小问题?

时间:2011-08-29 05:39:43

标签: php mysql

我的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来避免这个问题

2 个答案:

答案 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重命名为其他名称。