![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Привет! Делаю запрос:
SELECT COUNT(message.id) AS total_messages,
COUNT(articles.id) AS total_articles,
users.login AS name,
users.money,
users.rating
FROM users, articles, message
WHERE articles.id_author = '$user_id' AND
users.id = '$user_id' AND
users.role = 'author' AND
message.to = '$user_id' AND
message.status = 'unread'преамбула: этот запрос выводит общую информацию о пользователе: сколько новых сообщений, сколько статей, денег, рейтинг.
Так вот. Все выводится правильно, кроме поля total_messages, которому присваивается почемуто значение поля total_articles (это проверенный факт, если сделать изменения в базе чтоб изменилось количество статей, то измениться и total_messages).
Запрос выводит только 1 row.
Также пробывал через join-ы, но результат такой же:
SELECT COUNT(message.id) AS total_messages,
COUNT(articles.id) AS total_articles,
users.login AS name,
users.money,
users.rating AS rating
FROM users
LEFT JOIN articles ON articles.id_author = '$user_id'
LEFT JOIN message ON message.to = '$user_id' AND
message.status = 'unread'
WHERE users.id = '$user_id' AND
users.role = 'author'Вот пример результата:
Array
(
[total_messages] => 19
[total_articles] => 19
[name] => jambo
[money] => 85.07
[rating] => 8
)total_messages должен быть = 1.
В чем ошибка?
Неактивен
Нашел простейший неработающий вариант:
Итак, это запрос работает как надо:
Неактивен

Вы используете групповые функции count() без GROUP BY.
Неактивен
Я попробывал вставить GROUP BY, но теперь результат выводится в виде 19 колонок, тоесть тоже неправильно:
Неактивен

smackthat написал:
Я попробывал вставить GROUP BY, но теперь результат выводится в виде 19 колонок,
Скорее 19 строк.
smackthat написал:
Второй запрос, уже с ошибкой, результаты неправильны:
SELECT COUNT(message.id) AS total_messages,
COUNT(articles.id) AS total_articles
FROM message, articles
Результаты:
total_messages=19 (хотя только что было 1)
total_articles=19
Вы формируете таблицу из 2ух колонок и 19 строк и просите посчитать количество строк в первой и второй колонке. Закономерно, что результат в обоих случаях 19.
А если вы добавите в таблицу message ещё одно значение, то результат будет 38.
Посмотрите вывод
Неактивен
большое спасибо, хотя я совершенно не понимаю почему все происходит именно так. Что мне почитать, хочу просвятиться?
Неактивен

Классика:
http://dev.mysql.com/doc/refman/5.0/en/
Что посоветовать на русском даже не знаю. Разве, что больше экспериментруйте и задавайте здесь вопросы.
Неактивен
спасибо, вопросы обязательно буду задавать
Неактивен