Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка в подсчёте при сложной выборке 
:(
    Опции темы
Gold Dragon
Дата 22.5.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



есть таблицы
Код

CREATE TABLE `foto_true` (
  `id` int(11) NOT NULL auto_increment,
  `imgvotes` int(11) NOT NULL default '0',
  `imgvotesum` int(11) NOT NULL default '0',
  `published` tinyint(1) NOT NULL default '0',
  `owner` int(11) NOT NULL default '62',
  PRIMARY KEY  (`id`)
)

CREATE TABLE `foto_true_votes` (
  `vpic` int(11) NOT NULL default '0',
  `vip` varchar(255) NOT NULL default '',
  `vote` int(11) NOT NULL default '0',
  `user` varchar(255) NOT NULL default '',
  `date` varchar(100) default NULL,
  UNIQUE KEY `vpic` (`vpic`,`user`)
)

CREATE TABLE `foto_users` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL default '',
  `username` varchar(25) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `usertype` (`usertype`),
  KEY `idx_name` (`name`),
  KEY `idxemail` (`email`),
  KEY `block_id` (`block`,`id`),
  KEY `username` (`username`)
)


есть запрос
Код

SELECT COUNT( c.user ) AS countuser, 
    a.owner AS id, 
    b.username AS username, 
    SUM( a.imgvotes ) AS imgvotes, 
    SUM( a.imgvotesum ) AS imgvotesum, 
    FORMAT( AVG( c.vote ) , 2 ) AS vote,
    FORMAT( SUM( imgvotesum ) / SUM( imgvotes ) , 2 ) AS imim
FROM foto_true AS a
LEFT JOIN foto_users AS b ON b.id = a.owner
LEFT JOIN foto_true_votes AS c ON c.user = a.owner
WHERE a.published =1
AND a.imgvotes <>0
GROUP BY c.user
ORDER BY countuser DESC

всё считает вроде правильно, а вот countuser считает не правильно. Где ошибка может быть? Или это вообще посчитать в одно запросе нельзя?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Бонифаций
Дата 22.5.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



а в чем неправильно? как узнал что неправильно?

Это сообщение отредактировал(а) Бонифаций - 22.5.2009, 12:48


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Gold Dragon
Дата 22.5.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



если просто сделать Coun(..)  без дополнительных условий, то результат даёт правильный...т.е. показывает сколько всего записей в сгруппированном значении... при моём запросе число раза в два больше...

ps

полный дамп прикрепить сложнее.. много личной информации... Может явная ошибка какая есть?
 которую видно без данных



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Бонифаций
Дата 22.5.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Простой count по 1 таблице чтоли?


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Zloxa
Дата 22.5.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Gold Dragon @  22.5.2009,  12:57 Найти цитируемый пост)
при моём запросе число раза в два больше...

Потому что ваш запрос возвращает в два раза больше записей.
Если вы соединяете одну запись со многими, в результате получите много записей.
Вероятно вам нужен count(distinct User)


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Gwire
Дата 24.5.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4




smile Gold Dragon. Пытался понять, что у тебя за задача и какие должны быть данные.
Но ничего не получилось. Создал таблици. Заполнил произвольными данными. Выполнил запрос.
И ничего станного не увидел в результате. Селект отработал именно так как он построен. 
Может я просто не знаю, что должно получится относительно введенных данных и твоей задачи.

smile Gold Dragon, без обид, но просто получилось где-то так:
-----------
есть ингредиенты: Сусак, Ламинария и Сайгака
есть рецепт: Варим сайгака с 10мин. Бросаем тёртый сусак и варим еще 10мин. Подавать посыпав ламинарией.
Выглядит аппетитно, но на самом деле не вкусно. Что не так?
-----------
А что мы собстренно готовим? Нужно больше информации:
1) Какое отличие полей "name" и "username" в таблице foto_users. (хотя они в запросе роли не играют, но все же)
2) При создании foto_users поля "usertype", "email" и "block" не объявлены, но определяюстя ключами.
3) foto_true.owner связан с foto_users.id и foto_true_votes.user  (видно из селекта)
    а) Почему foto_true.owner default = 62
    b) Почему типы foto_true.owner - int(11) и foto_users.id - int(11) а foto_true_votes.user - varchar(255).
4) Что должно быть результатом запроса
smile 

 



Это сообщение отредактировал(а) Gwire - 24.5.2009, 17:29
PM MAIL   Вверх
Gold Dragon
Дата 25.5.2009, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Это компонент фотогалереи для CMS Joomla

первая таблица - хранит фотографии (конечно многие поля вырезаны, которые не используются в запросе для облегчения понимания)
 imgvotes - сколько проголосовало человек, imgvotesum - суммарная оценка

вторая таблица - конкретизация голосования по конкретной фотке, т.е. кто сколько и за какую фотку поставил

третья  - таблица пользователей. user - настоящее имя - username - логин

На индекс не посмотрел smile В оригинале есть все эти поля
Цитата(Gwire @  24.5.2009,  18:26 Найти цитируемый пост)
Почему foto_true.owner default = 62
зарезервированный в системе ID Super Administratora

Цитата(Gwire @  24.5.2009,  18:26 Найти цитируемый пост)
Почему типы foto_true.owner - int(11) и foto_users.id - int(11) а foto_true_votes.user - varchar(255)
ну это так разработчики придумали... конечно глупость, но уж как есть.. 

должно получится
- имя (логин) юзера
- сколько раз ставил оценки юзер
- средний бал его оценок
- сколько оценок ставили юзеру
- средний бал этих оценок

ниже прикрепил дамп данных двух таблиц.. Данные пользователей увы не могу :( Но там всё просто... идентификатор и всё о юзере



Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  11.TGZ 87,66 Kb


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.