sql подзапрос, передавая переменную - PullRequest
0 голосов
/ 30 марта 2012

Можете ли вы передавать переменные в подзапросы, например?

SELECT users.id AS id, 
(SELECT SUM(total) FROM (image_totals) WHERE `cat_id` IN ('5', '3') AND `user_id` =id) AS image_count

Это только часть более крупного запроса, который генерируется через Active Record, но остается ключевая проблема, переменная 'id', как я могу передать это в свой подзапрос? Я смотрю на это все неправильно?

Спасибо заранее. И дайте мне знать, если вам нужно больше информации.

Ответы [ 3 ]

3 голосов
/ 30 марта 2012

Если я правильно понял ваш вопрос, то да, вы можете.

Если таблицы не содержат одинаковые столбцы, вам не нужно имя таблицы для каждого столбца.Я предпочитаю включать имя таблицы, так как это облегчает понимание.

SELECT  users.id AS id ,
        (SELECT SUM(image_totals.total)
         FROM   image_totals
         WHERE  image_totals.cat_id IN ( '5', '3' ) AND 
                image_totals.user_id = users.id) AS image_count
FROM users

вы также можете использовать псевдонимы для таблиц, чтобы сделать его немного легче набирать.u = пользователь и i = image_totals.

SELECT  u.id AS id ,
        (SELECT SUM(i.total)
         FROM   image_totals AS i
         WHERE  i.cat_id IN ( '5', '3' ) AND 
                i.user_id = u.id) AS image_count
FROM users AS u
1 голос
/ 30 марта 2012

Используйте GROUP BY.Вы хотите SUM (всего) для каждого user.id для конкретных значений cat_id.Я не знаю, как выглядит остальная часть вашего запроса, но для того, что было показано, вы можете просто:

SELECT
        users.id AS id,
        SUM(total)
FROM image_totals
WHERE cat_id IN ('5', '3')
GROUP BY users.id
1 голос
/ 30 марта 2012

Нет, это невозможно, это нужно будет реализовать по-другому.

Выбор должен быть выбором из одного согласованного набора данных.

Ваш набор данных может содержать сложные запросы.

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