2016-08-31 3 views
-4

У меня есть запрос с проблемой:SQL Query ошибка

SELECT `User`.`id`, `User`.`name`, `User`.`email`, 
`User`.`lastname`, `User`.`mobile_phone`, `User`.`status`, 
    `Activity`.`name`, `Business`.`name`, `Activity`.`id`, 
    `Business`.`id`, 
    (SELECT SUM(points) FROM (SELECT SUM(points) as points 
    FROM meetings as Meeting 
     where `Meeting`.`user_id` = `User`.`id`) x) 
     AS `User__total_points` 

Ошибка:

Column not found: 1054 Unknown column 'User.id' in 'where clause' 

Запрос является более сложным, но это та часть, которая выдаст сообщение об ошибке.

EDITED

новый запрос witout сумму

SELECT User.id, User.name, User.email, User.lastname, User.mobile_phone, User.status, 
(SELECT COUNT(*) FROM meetings as Meeting WHERE Meeting.status = 1 and Meeting.user_id = User.id and (date BETWEEN "2016-01-01" AND "2016-02-29")) AS meetings_count 
FROM bup.users AS User 

работает отлично User.id не проблема

но если

SELECT User.id, User.name, User.email, User.lastname, User.mobile_phone, User.status, 
(SELECT COUNT(*) FROM meetings as Meeting WHERE Meeting.status = 1 and Meeting.user_id = User.id and (date BETWEEN "2016-01-01" AND "2016-02-29")) AS meetings_count, 
**(SELECT SUM(points) FROM (SELECT SUM(points) as points FROM meetings as Meeting where Meeting.user_id = User.id) x) AS total_points** 
FROM bup.users AS User 

Колонка не найдено: 1054 Unknown column 'User.id' в 'where clause' erro г снова

благодаря

+0

Поделитесь структурой базы данных для обеих таблиц в вопросе –

+0

Конечно, вы получите это, у вас нет таблицы 'user', используемой в вашем запросе в любом месте.У вас нет 'от пользователя', у вас нет' join user' или даже псевдонима, устанавливающая 'user'. –

ответ

0

я не вижу его здесь в коде, но:

`User.id` -- A column literally called "User.id" 
`User`.`id` -- A column called "id" in the table "User" 

Это две разные вещи. Вы захотите просмотреть свои запросы для любого экземпляра литерала User.id.

Стоит отметить, что если вы проектируете свою схему с чистыми именами, вам не понадобятся обратные записи на все. Фактически, они мешают и вызывают такие проблемы, если использовать их без вопросов. Единственный раз, когда вы в них нуждаетесь, - это если в столбце или имени таблицы есть пробелы, специальные символы или конфликты с MySQL reserved keywords, но этих ситуаций можно избежать при тщательном планировании.

0

MySQL будет обрабатывать внутренний оператор SELECT FIRST, поэтому внутренний оператор не будет иметь никакого знания внешнего оператора, поскольку он является взаимоисключающим.

Так ваше внутреннее утверждение:

SELECT SUM(points) as points 
    FROM meetings as Meeting 
     where `Meeting`.`user_id` = `User`.`id` 

Где вы можете (должны) теперь ясно видеть проблему в том, что таблица User не была определена, так что вам нужно, чтобы исправить это с чем-то вроде:

SELECT SUM(points) as points 
    FROM meetings INNER JOIN User 
    ON `Meeting`.`user_id` = `User`.`id` 

который решит вашу ошибку, но может не дать вам точных результатов, которые вам нужны. К сожалению, у меня нет четкого решения, чтобы вы не сворачивали свой стек SELECT, поэтому ваш внутренний становится внешним, а внешний - внутренним и т. Д.

Надеюсь, кто-то может отредактировать этот ответ и добавить лучшее решение. Но это твоя проблема.

Также обратите внимание, что User - это ключевое слово MySQL, поэтому вам будет легче использовать его для имен столбцов или таблиц. Reference.