2014-12-14 3 views
0

У меня странная ситуация. Мне нужно выбрать все данные из имени таблицы с различными значениями из другой таблицы.Подсчитайте различные значения с помощью результатов запроса SELECT с ошибкой

Вот схема базы данных базы данных, что мне нужно, чтобы получить различные значения:

enter image description here

Когда я бегу оба запроса без INNER JOIN они выполняются без ошибок, но когда я использую INNER JOIN я получил ошибку

Это вопрос, который я использовал:

SELECT * FROM `todo` 
INNER JOIN 

SELECT `task`.`status`,COUNT(*) as count FROM `task` 
ON `todo`.`id`=`task`.`id_list` WHERE `todo`.`user_id` = 43 

Как вы можете видеть, что нужно, чтобы получить общее количество столбца состояния от О.Т. ее стол. Это может быть сделано с помощью одного запроса к одной или мне нужно запустить два querys, чтобы получить данные ...

+0

Какое сообщение об ошибке вы получаете? –

+0

@ Ошибка David-McQ: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «SELECT' task'.'status', COUNT (*) как счетчик FROM 'task' ON' todo'.'id' = 'task' .'id_l 'в строке 4 – jureispro

ответ

1

Вам нужно обернуть присоединиться В скобках

SELECT td.*, t.* 
FROM `todo` td 
JOIN 
( SELECT `status`, SUM(status=0) as status_0, SUM(status=1) as status_1 , id_list 
    FROM `task` 
    GROUP BY id_list 
) t ON td.id= t.id_list 
WHERE td.user_id = 43 
+0

Благодарим за ответ. Когда я запускаю ваш запрос, он работает, но проблема в том, что я получил только статус и граф в качестве результатов ... Мне нужны записи из базы данных todo тоже – jureispro

+0

@jureispro см. Редактирование i добавил ... Я говорю todo. * И задачи. * –

+0

Я пробовал свой код, но теперь я получил пустой результат. Запрос выполняется нормально, но результатов нет ... Нужно ли их группировать? – jureispro

1

Вы можете сделать это в одном запросе. Даже без подзапроса:

SELECT ta.status, COUNT(*) as count 
FROM todo t INNER JOIN 
    task ta 
    ON t.id = ta.id_list 
WHERE t.user_id = 43 
GROUP BY ta.status; 

EDIT:

Если выше производит то, что вы хотите, то вы, вероятно, потребуется:

SELECT t.*, ta.status, taa.cnt 
FROM todo t INNER JOIN 
    task ta 
    ON t.id = ta.id_list INNER JOIN 
    (SELECT count(*) as cnt, ta.status 
     FROM task ta 
     GROUP BY ta.status 
    ) taa 
    on ta.status = taa.status 
WHERE t.user_id = 43 ; 

Вы, кажется, хотите резюме на status уровне, только в task. Но вам нужна информация на уровне строки для todo.

+0

ваш код работает, но мне нужны данные из базы данных todo. С вашим запросом я получил только статус столбца из базы данных задач – jureispro

Смежные вопросы