Задавайте вопросы, мы ответим
Вы не зашли.
Привет! Делаю запрос:
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/
Что посоветовать на русском даже не знаю. Разве, что больше экспериментруйте и задавайте здесь вопросы.
Неактивен
спасибо, вопросы обязательно буду задавать
Неактивен