из пункта с вопросом о MySQL - PullRequest
1 голос
/ 01 апреля 2011
mysql> describe events;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| city_id         | int(11)      | NO   | MUL | NULL    |                |

Следующий sql вызывает ошибку.

  SELECT CONCAT_WS('',users.fname,' ', users.lname) as user_name,
   COUNT(events.id) AS events_count
  FROM users
   INNER JOIN events ON users.id = events.user_id
   INNER JOIN cities ON cities.id = events.city_id
  GROUP BY
    users.id
  WHERE
    events.city_id = 18
  ORDER BY
   COUNT(events.id) DESC
  LIMIT 10

Ошибка

ActiveRecord::StatementInvalid: Mysql2::Error: 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 'WHERE
        events.city_id = 18

Если я удаляю предложение WHERE, то все работает нормально.

Ответы [ 5 ]

3 голосов
/ 01 апреля 2011

Попробуйте поместить предложение WHERE перед GROUP BY

2 голосов
/ 01 апреля 2011

WHERE должен прийти раньше GROUP BY

2 голосов
/ 01 апреля 2011

используйте WHERE перед GROUP BY, и оно должно работать

1 голос
/ 01 апреля 2011

Поместите условие events.city_id=18 в СОЕДИНЕНИЕ. На самом деле нет смысла включать его в предложение WHERE, поскольку вы выполняете INNER соединение.

INNER JOIN events ON users.id = events.user_id AND events.city_id=18
0 голосов
/ 01 апреля 2011

Вы хотите использовать GROUP BY...HAVING?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...