LinuxForum.Fans
Тема

Где ошибка в запросе?

Автор: Rizado 7 сообщений 1170 просмотров
10.03.2015 12:31 #417080

Вот запрос к БД MySQL:

text
SELECT
  ru.user_id,
  ru.user_name_last,
  ru.user_name_first,
  ru.user_name_middle,
  ru.user_r7_level,
  COUNT(rc.contract_id) user_contract_count
FROM
  r7_users ru
INNER JOIN
  r7_contracts rc
ON
  rc.contract_owner = ru.user_id
GROUP BY
  ru.user_id
ORDER BY
  ru.user_id
LIMIT
  0, 20

Запрос выполняется, возвращает корректные данные, но сервер при этом ругается:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') FROM r7_users' at line 1

Где искать? Разница только в том, что оригинальный запрос идёт в одну строку, а здесь я отформатировал для удобства чтения.

10.03.2015 12:47 #417084
text
FROM
  r7_users ru
INNER JOIN
  r7_contracts rc

запятые между " r7_users" и "ru", также в INNER JOIN. ??

10.03.2015 13:01 · отредактировано #417088
"Rizado" написал:
FROM r7_users ru

вангую, что должно быть

text
FROM `r7_users.ru`

ну и всё остальное тоже `в таких кавычках` нужно, и синтаксис правильный.

"AntiduPb" написал:
запятые между " r7_users" и "ru",

думаете есть таблица `ru`?

"Rizado" написал:
ru.user_id,

хм, да, есть такая таблица. Не заметил. Нужно запятую, AntiduPb вы правы.

10.03.2015 14:31 · отредактировано #417105
"AntiduPb" написал:
запятые между " r7_users" и "ru", также в INNER JOIN. ?

ru -- это алиас для r7_users,
rc -- это алиас для r7_contracts.

Вероятно, раз

"Rizado" написал:
near ') FROM r7_users'

то есть, съел user_contract_count, то может хотеть явное AS в

text
COUNT(rc.contract_id) AS user_contract_count

PS. Хотя, AS и в списке полей и в списке таблиц числится необязательным, http://dev.mysql.com/doc/refman/5.7/en/select.html, http://dev.mysql.com/doc/refman/5.7/en/join.html
О какой версии MySQL речь?

10.03.2015 15:55 #417121
"bormant" написал:
О какой версии MySQL речь?

5.1.72

"drBatty" написал:
вангую, что должно быть
text
FROM `r7_users.ru`

Тот же результат.

"bormant" написал:
может хотеть явное AS

Не помогло.

И повторю, что запрос выдаёт корректные данные.

10.03.2015 23:14 #417180
text
$ ls /var/adm/packages/mariadb-*
/var/adm/packages/mariadb-5.5.40-x86_64-2_slack14.1

$ mysql MariaDB [(none)]> use test; MariaDB [test]> create table r7_users (user_id INT, user_name VARCHAR(40)); MariaDB [test]> create table r7_contracts (contract_id INT, conract_owner INT); MariaDB [test]> select ru.user_id, ru.user_name, COUNT(rc.contract_id) user_contract_count -> from r7_users ru inner join r7_contracts rc on rc.contract_owner = ru.user_id -> group by ru.user_id order by ru.user_id limit 0,20; MariaDB [test]>

Консольный клиент никакого криминала в запросе не видит. Посмотрите, кто ещё у вас синтаксис SQL может разбирать, из того, через что выполняется запрос, и ругаться на непонятки...

10.03.2015 23:29 · отредактировано #417183

Да я проверял онлайн-проверкой, тоже всё кошерно. Разве сейчас буду по частям убирать - увижу, на что ругается.

Upd. Вопрос снят. Если кратко - опечатка была в другом запросе, который шёл после этого. А сообщение выводилось перед данными, хотя должно было после. Вот это меня и смутило :( .

Войдите или зарегистрируйтесь, чтобы ответить.