SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.03.2009 15:58:49

kotofeich
Участник
Зарегистрирован: 08.08.2008
Сообщений: 10

Специфика запросов в разных версиях mysql

Здравствуйте.
Целый день долблюсь и не могу понять в чем ошибочек мой запрос.
Вот сам запрос в упрощенном виде (в теории он должен получить статьи из таблицы content, колличество коментариев из таблицы comments к какждой статье, и подробные данные об авторе статьи из users):


SELECT c . *, count(icom.id) as countcomments
FROM content AS c, users AS u
LEFT JOIN comments AS icom ON ( icom.idarticle = c.id )
WHERE u.id = c.created_by
GROUP BY c.id
 


Вот структура трех участвующих таблиц (это таблицы контента, комментариев и пользователей):

CREATE TABLE `content` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL default '',
  `introtext` text NOT NULL,
  `fulltext` text NOT NULL,
  `state` char(1) NOT NULL default '0',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `created_by` int(11) NOT NULL default '0',
  `hits` int(11) NOT NULL default '0',
  `metakey` text NOT NULL,
  `metadesc` text NOT NULL,
  `comments` char(1) NOT NULL default '',
  `premoderation` char(1) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
 



CREATE TABLE `comments` (
  `id` int(11) NOT NULL auto_increment,
  `parent` int(11) NOT NULL default '0',
  `idarticle` int(11) NOT NULL default '0',
  `created_by` int(11) NOT NULL default '0',
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  `text` text NOT NULL,
  `publish` int(3) NOT NULL default '0',
  `username` varchar(70) NOT NULL default '',
  `email` varchar(70) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
 



CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `username` varchar(150) NOT NULL default '',
  `email` varchar(100) NOT NULL default '',
  `password` varchar(100) NOT NULL default '',
  `usertype` varchar(25) NOT NULL default '',
  `block` tinyint(4) NOT NULL default '0',
  `sendEmail` tinyint(4) default '0',
  `gid` tinyint(3) unsigned NOT NULL default '1',
  `registerDate` datetime NOT NULL default '0000-00-00 00:00:00',
  `lastvisitDate` datetime NOT NULL default '0000-00-00 00:00:00',
  `activation` varchar(100) NOT NULL default '',
  `params` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `usertype` (`usertype`),
  KEY `idx_name` (`name`),
  KEY `gid_block` (`gid`,`block`),
  KEY `username` (`username`),
  KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
 


Проблема в том, что мой запрос работает MySQL 4.1.16, но наотрез отказывается работать в MySQL 5.0.45 и выдает ошибку Unknown column 'c.id' in 'on clause'.

Подскажите как надо исправить запрос, чтобы он работал желательно во всех версиях mysql:)

Неактивен

 

#2 20.03.2009 16:26:33

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5831

Re: Специфика запросов в разных версиях mysql

Начиная с версии 5.0.12 LEFT JOIN имеет больший приоритет, чем INNER JOIN (,), поэтому и возникает ошибка

Необходимо:


SELECT c . *, count(icom.id) AS countcomments
FROM (content AS c, users AS u)
LEFT JOIN comments AS icom ON ( icom.idarticle = c.id )
WHERE u.id = c.created_by
GROUP BY c.id

Неактивен

 

#3 20.03.2009 16:53:31

kotofeich
Участник
Зарегистрирован: 08.08.2008
Сообщений: 10

Re: Специфика запросов в разных версиях mysql

Спасибо большое. Все работает. Теперь буду знать.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson