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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в запросе... не выходит посчитать COUNT... использование JOIN и LEFT JOIN 
V
    Опции темы
GPolis
Дата 15.12.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеются три таблицы:

Код

CREATE TABLE `GP_USERS` (
  `ID` int(11) NOT NULL auto_increment,
  `login` tinytext character set cp1251 collate cp1251_general_ci_old NOT NULL,
  `password` tinytext character set utf8 collate utf8_bin NOT NULL,
  `name` tinytext collate utf8_unicode_ci NOT NULL,
  UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;


Код

CREATE TABLE `GP_CHRONICLES` (
  `ID` int(11) NOT NULL auto_increment,
  `ownerID` int(11) NOT NULL default '0',
  `datetime` datetime NOT NULL default '0000-00-00 00:00:00',
  `title` tinytext collate utf8_unicode_ci NOT NULL,
  `entry` text collate utf8_unicode_ci NOT NULL,
  KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=47 ;


Код

CREATE TABLE `GP_CHRONICLES_COMMENTS` (
  `ID` bigint(20) NOT NULL auto_increment,
  `ownerID` int(11) NOT NULL default '0',
  `chronicleID` int(11) NOT NULL default '0',
  `datetime` datetime NOT NULL default '0000-00-00 00:00:00',
  `comment` text collate utf8_unicode_ci NOT NULL,
  KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=24 ;


Нужно выбрать все поля из GP_CHRONICLES, соответствующие им ID и name из GP_USERS, а также посчитать сумму комментариев к каждой строке GP_CHRONICLES (из GP_CGRONICLES_COMMENTS).

Использование обычного JOIN, как в нижеприведенном скрипте, конечно же, показывает только Chronicles, к которым есть комментарии

Код

SELECT gp_users.name, gp_users.id, gp_chronicles . * , count( gp_chronicles_comments.id )
FROM `GP_USERS`
JOIN `GP_CHRONICLES`
JOIN `GP_CHRONICLES_COMMENTS` ON gp_users.id = gp_chronicles.ownerID
AND gp_chronicles_comments.chronicleID = gp_chronicles.id
GROUP BY gp_chronicles.id
ORDER BY gp_chronicles.datetime DESC
LIMIT 0 , 30


Пробую через LEFT JOIN:

Код

SELECT gp_users.name, gp_users.id, gp_chronicles . * , count( gp_chronicles_comments.id )
FROM `GP_USERS`
JOIN `GP_CHRONICLES`
LEFT JOIN `GP_CHRONICLES_COMMENTS` ON gp_users.id = gp_chronicles.ownerID
AND gp_chronicles_comments.chronicleID = gp_chronicles.id
GROUP BY gp_chronicles.id
ORDER BY gp_chronicles.datetime DESC
LIMIT 0 , 30


показывает правильное количество комментариев, но, почему-то, неверные ID и name из GP_USERS

Что тут может быть не так?
PM MAIL   Вверх
Dremlin
Дата 15.12.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Quo vadis?
*


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

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



а так?
Код

SELECT gp_users.name, gp_users.id, gp_chronicles . * , count( gp_chronicles_comments.id )
FROM `GP_USERS`
JOIN `GP_CHRONICLES` ON gp_users.id = gp_chronicles.ownerID
LEFT JOIN `GP_CHRONICLES_COMMENTS` ON gp_chronicles_comments.chronicleID = gp_chronicles.id
GROUP BY gp_chronicles.id
ORDER BY gp_chronicles.datetime DESC
LIMIT 0 , 30


Это сообщение отредактировал(а) Dremlin - 15.12.2006, 11:14
--------------------
Каждый дурак знает, что до звезд не достать, а умные, не обращая внимания на дураков, пытаются...
PM MAIL   Вверх
GPolis
Дата 15.12.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



заработало!!!  smile 

спасибо  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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