群组连击结果不准确

时间:2019-05-01 08:26:07

标签: php mysql join group-concat

我正在使用GROUP_CONCAT()显示多个类别,但没有得到确切的结果。对于表联接,我正在使用IN()子句,请为此提供帮助。

  

查询仅显示一个类别。在数据库类别ID存储中,例如2,5,8

$sql = "SELECT u.*, GROUP_CONCAT(c.name SEPARATOR ',') as cname, s.name as sname
        FROM course u        
        INNER JOIN category c ON c.id IN (u.category_id) 
        INNER JOIN status s ON s.id = u.status_id
        WHERE u.is_deleted = 0 AND u.id = $id $app
        LIMIT 1";

我想要类别表中的多个类别。

3 个答案:

答案 0 :(得分:0)

group_concat是一个聚合函数,当您还需要未聚集的列时,为了正确使用这些函数,需要GROUP BY子句和用于聚合级别的列名

    SELECT  GROUP_CONCAT(c.name SEPARATOR ',') as cname, s.name as sname
    FROM course u        
    INNER JOIN category c ON c.id IN (u.category_id) 
    INNER JOIN status s ON s.id = u.status_id
    WHERE u.is_deleted = 0 AND u.id = $id $app
    GROUP BY s.name
    ORDER BY s.name 
    LIMIT 1; 

答案 1 :(得分:0)

我使用分组方式和排序方式,但对我不起作用。

如果我通过“ 2,6,8”代替IN()中的u.category_id,则认为“ INNER JOIN类别c ON c.id IN(u.category_id)”行中存在问题。 / p>

请看一下。

答案 2 :(得分:0)

在第一个代码中,如果我在IN()子句中使用自定义ID对我来说工作正常

$ sql =“ SELECT u。*,GROUP_CONCAT(c.name SEPARATOR'
')作为cname,s.name作为sname         从课程开始
        内部联接类别c ON c.id IN(3,1,9)         INNER JOIN状态s ON s.id = u.status_id         其中u.is_deleted = 0和u.id = $ id $ app         LIMIT 1“;

如果我在IN()子句查询中使用“ u.category_id”,则仅检索一个类别

$ sql =“ SELECT u。*,GROUP_CONCAT(c.name SEPARATOR'
')作为cname,s.name作为sname         从课程开始
        INNER JOIN类别c ON c.id IN(u.category_id)         INNER JOIN状态s ON s.id = u.status_id         其中u.is_deleted = 0和u.id = $ id $ app         LIMIT 1“;

我想在查询中使用IN(u.category_id)子句来检索正确的结果。