Конкретный результат группы не является точным - PullRequest
0 голосов
/ 01 мая 2019

Я использую GROUP_CONCAT () для отображения нескольких категорий, но я не получаю точный результат.для объединения таблиц я использую предложение IN (), пожалуйста, помогите мне в этом.

В запросе отображается только одна категория.в хранилище идентификаторов категорий базы данных, например, 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 голосов
/ 01 мая 2019

Я использовал группирование и заказ по, но не работал для меня.

Я думаю, что проблема в строке "INNER JOIN Категория c ON c.id IN (u.category_id)", если я передаю "2,6,8" вместо u.category_id в IN (), оговорена, что она работает нормально.

пожалуйста, посмотрите на это.

0 голосов
/ 01 мая 2019

В первом коде, если я использую пользовательский идентификатор в предложении IN (), работает нормально для меня

$ sql = "SELECT u. *, GROUP_CONCAT (c.name SEPARATOR '
') как cname, s.name как sname С курса у
ВНУТРЕННЯЯ РЕЙТИНГ категория c ON c.id IN (3,1,9) ВНУТРЕННЕЕ СОЕДИНЕНИЕ статус s ВКЛ s.id = u.status_id ГДЕ u.is_deleted = 0 И u.id = $ id $ app LIMIT 1 ";

если я использую 'u.category_id' в запросе предложения IN (), получаю только одну категорию

$ sql = "SELECT u. *, GROUP_CONCAT (c.name SEPARATOR '
') как cname, s.name как sname С курса u
ВНУТРЕННЕЕ СОЕДИНЕНИЕ категория c ON c.id IN (u.category_id) ВНУТРЕННЕЕ СОЕДИНЕНИЕ статус s ВКЛ s.id = u.status_id ГДЕ u.is_deleted = 0 И u.id = $ id $ app LIMIT 1 ";

Я хочу использовать предложение IN (u.category_id) в запросе для получения правильного результата.

0 голосов
/ 01 мая 2019

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; 
...