MySQL запрос работает неправильно? - PullRequest
0 голосов
/ 09 января 2011

У меня есть следующий запрос MySQL, который должен возвращать t1.username, t1.website, in_count (WHERE t2.type = 'in'), out_count (WHERE t2.type = 'out') и WHERE, поле t1.website равно NOT EMPTY или NULL.

Однако, похоже, что он неисправен (или я делаю что-то не так?), Так как он возвращает 1 результат (через mysql_num_rows()) и когда я print_r() (на mysql_fetch_assoc()), ключи столбцов Однако все их значения являются пустыми / пустыми (см. ниже).

Дамп print_r():

Array
(
    [username] => 
    [website] => 
    [in_count] => 
    [out_count] => 
)

Запрос MySQL:

SELECT t1.username,
       t1.website,
       SUM(IF(t2.type = 'in', 1, 0))  AS in_count,
       SUM(IF(t2.type = 'out', 1, 0)) AS out_count
FROM   users AS t1
       JOIN referrals AS t2
         ON t1.username = t2.author
WHERE  NOT Isnull(t1.website)
LIMIT  0, 10 

Надеюсь, все ясно, дайте мне знать, если вам нужна дополнительная информация, благодарю за помощь. : B

Ответы [ 2 ]

2 голосов
/ 09 января 2011

Похоже, вам может понадобиться предложение GROUP BY в конце? Возможно

GROUP BY t1.username, t1.website

Таким образом, вы получите все входные и выходные данные для конкретного пользователя на определенном веб-сайте.

У меня сложилось впечатление, что с агрегатными функциями, такими как SUM, для запроса требуется предложение GROUP BY ... Я удивлен, что сервер принял ваш SQL.

0 голосов
/ 09 января 2011

Функция SUM() является агрегатом, и в вашем запросе нет оператора GROUP, поэтому она не имеет ничего общего. Вы всегда можете проверить состояние ошибки вашего запроса в PHP, выдав содержимое mysql_error(), которое в этом случае, скорее всего, скажет, что вы пропустили оператор GROUP.

Исходя из вашего запроса, создается впечатление, что вы намерены установить связь между пользователями и рефералами «один ко многим», поэтому вы должны группировать что-то вроде t1.username (или идентификатор пользователя, если он есть в вашей таблице).

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