Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблемы с написанием запроса (MySQL) / 8 сообщений из 8, страница 1 из 1
20.09.2005, 11:44:56
    #33278285
Pavel Trizno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с написанием запроса (MySQL)
Столкнулся с сабжем!
Структура таблиц и данные:

Таблица comment_option :
Структура :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE comment_content (
  comment_id int( 10 ) unsigned NOT NULL auto_increment,
  comment_assoc_id int( 10 ) unsigned NOT NULL default '0',
  comment_autor_name varchar( 255 ) NOT NULL default '',
  comment_autor_mail varchar( 255 ) default NULL,
  comment_autor_time datetime default '0000-00-00 00:00:00',
  comment_autor_message text NOT NULL,
  comment_autor_ip varchar( 255 ) NOT NULL default '',
  comment_autor_agent varchar( 255 ) NOT NULL default '',
  PRIMARY KEY  (comment_id),
  KEY comment_assoc_id (comment_assoc_id)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Данные :
Код: plaintext
1.
2.
3.
INSERT INTO article_content VALUES ( 16 ,  2 , 'testart', 'Testart', 'test\r\n', 'on');
INSERT INTO article_content VALUES ( 17 ,  2 , 'test2', 'Test2', '123\r\n', 'off');
INSERT INTO article_content VALUES ( 18 ,  2 , 'test3', 'Test3', '123\r\n', 'on');

Таблица comment_option :
Структура :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE comment_option (
  comment_assoc_id int( 10 ) unsigned NOT NULL auto_increment,
  comment_parent_mod varchar( 255 ) NOT NULL default '',
  comment_parent_title varchar( 255 ) NOT NULL default '',
  comment_parent_trants_title varchar( 255 ) NOT NULL default '',
  comment_display varchar( 4 ) NOT NULL default 'full',
  PRIMARY KEY  (comment_assoc_id),
  KEY comment_parent_mod (comment_parent_mod),
  KEY comment_parent_trants_title (comment_parent_trants_title)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Данные :
Код: plaintext
1.
2.
INSERT INTO comment_option VALUES ( 18 , 'article', 'testart', 'Testart', 'full');
INSERT INTO comment_option VALUES ( 19 , 'article', 'test3', 'Test3', 'full');

Таблица comment_content :
Структура :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE comment_content (
  comment_id int( 10 ) unsigned NOT NULL auto_increment,
  comment_assoc_id int( 10 ) unsigned NOT NULL default '0',
  comment_autor_name varchar( 255 ) NOT NULL default '',
  comment_autor_mail varchar( 255 ) default NULL,
  comment_autor_time datetime default '0000-00-00 00:00:00',
  comment_autor_message text NOT NULL,
  comment_autor_ip varchar( 255 ) NOT NULL default '',
  comment_autor_agent varchar( 255 ) NOT NULL default '',
  PRIMARY KEY  (comment_id),
  KEY comment_assoc_id (comment_assoc_id)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251; 
Данные :
Код: plaintext
1.
2.
INSERT INTO comment_content VALUES ( 1 ,  0 , '1', '1', '0000-00-00 00:00:00', '1', '1', '1');
INSERT INTO comment_content VALUES ( 47 ,  18 , '123', '123', '2005-09-18 21:30:05', '123', '127.0.0.1', 'Mozilla/5.0 (Windows; U; Win 9x 4.90; ru-RU; rv:1.7.10) Gecko/20050717 Firefox/1.0.6'); 

Сам проблемный запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT `article_id` , `article_title`, `article_trans_title`, `article_comment_status`, if(article_content.article_comment_status="off", 0 ,count(comment_content.comment_assoc_id)) article_comment_counter 
FROM `article_content`,`comment_option`, `comment_content` 
WHERE 
`section_id` ='2' 
and 
(
(article_content.article_comment_status="off") 
or 
(article_content.article_comment_status="on" and comment_option.comment_parent_trants_title=article_content.article_trans_title and comment_option.comment_parent_mod="article" and comment_content.comment_assoc_id=comment_option.comment_assoc_id)
) 
GROUP BY article_content.article_trans_title 
ORDER BY `article_title` ASC
Результат работы запроса:
article_id | article_title | article_trans_title | article_comment_status | article_comment_counter
17 test2 Test2 off 0
16 testart Testart on 1

Результат с точки зрения SQL правильный (: ,но я хотел бы немного иного резульата, как видно в выборку не включается артикль с id 18 т.к. в таблице comment_content
нет ни одной записи относящейся к данному артиклю. Иными словами мне необходимо получить следующий результат:
article_id | article_title | article_trans_title | article_comment_status | article_comment_counter
17 test2 Test2 off 0
16 testart Testart on 1
18 test3 Test3 on 0

К сожалению для достижения желаемого результат моих знаний в SQL недостаточно. Быть может вы господа наставите меня на путь истинный или хотя бы намекнете в какую часть мана смотреть.
...
Рейтинг: 0 / 0
20.09.2005, 15:24:10
    #33279150
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с написанием запроса (MySQL)
Pavel TriznoСтолкнулся с сабжем!
Структура таблиц и данные:

Таблица comment_option :
Структура :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE comment_content (
  comment_id int( 10 ) unsigned NOT NULL auto_increment,
  comment_assoc_id int( 10 ) unsigned NOT NULL default '0',
  comment_autor_name varchar( 255 ) NOT NULL default '',
  comment_autor_mail varchar( 255 ) default NULL,
  comment_autor_time datetime default '0000-00-00 00:00:00',
  comment_autor_message text NOT NULL,
  comment_autor_ip varchar( 255 ) NOT NULL default '',
  comment_autor_agent varchar( 255 ) NOT NULL default '',
  PRIMARY KEY  (comment_id),
  KEY comment_assoc_id (comment_assoc_id)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Данные :
Код: plaintext
1.
2.
3.
INSERT INTO article_content VALUES ( 16 ,  2 , 'testart', 'Testart', 'test\r\n', 'on');
INSERT INTO article_content VALUES ( 17 ,  2 , 'test2', 'Test2', '123\r\n', 'off');
INSERT INTO article_content VALUES ( 18 ,  2 , 'test3', 'Test3', '123\r\n', 'on');
а теперь ещё раз, только без глюков.
И разве INSERT INTO comment_content VALUES (47, 18, '123', '123', '2005-09-18 21:30:05', '123', '127.0.0.1', 'Mozilla/5.0 (Windows; U; Win 9x 4.90; ru-RU; rv:1.7.10) Gecko/20050717 Firefox/1.0.6'); - это не запись с comment_assoc_id=18?
А копать нуно в LEFT OUTER JOIN ... WHERE ... IS NULL
...
Рейтинг: 0 / 0
20.09.2005, 15:35:20
    #33279183
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с написанием запроса (MySQL)
13.2.7.1. JOIN Syntax
If there is no matching record for the right table in the ON or USING part in a LEFT JOIN, a row with all columns set to NULL is used for the right table. You can use this fact to find records in a table that have no counterpart in another table:
Код: plaintext
1.
2.
SELECT table1.* FROM table1
 LEFT JOIN table2 ON table1.id=table2.id
 WHERE table2.id IS NULL;
This example finds all rows in table1 with an id value that is not present in table2 (that is, all rows in table1 with no corresponding row in table2). This assumes that table2.id is declared NOT NULL.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
20.09.2005, 22:30:40
    #33280018
Pavel Trizno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с написанием запроса (MySQL)
maXmo
[/src]а теперь ещё раз, только без глюков.
И разве INSERT INTO comment_content VALUES (47, 18, '123', '123', '2005-09-18 21:30:05', '123', '127.0.0.1', 'Mozilla/5.0 (Windows; U; Win 9x 4.90; ru-RU; rv:1.7.10) Gecko/20050717 Firefox/1.0.6'); - это не запись с comment_assoc_id=18?
А копать нуно в LEFT OUTER JOIN ... WHERE ... IS NULL
Имеется в виду article_id = 18 На счет JOIN я пробовал нужного результата так и недобился...
...
Рейтинг: 0 / 0
21.09.2005, 11:24:04
    #33280682
Fabel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с написанием запроса (MySQL)
где-то в вопросе ошибка. Где таблица article_content, если о ней речь?
...
Рейтинг: 0 / 0
22.09.2005, 20:56:07
    #33284769
Pavel Trizno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с написанием запроса (MySQL)
прошу прощения!
Структура article_content:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE `article_content` (
  `article_id` int( 10 ) unsigned NOT NULL auto_increment,
  `section_id` int( 10 ) unsigned NOT NULL default '0',
  `article_title` varchar( 255 ) NOT NULL default '',
  `article_trans_title` varchar( 255 ) NOT NULL default '',
  `article_content` text NOT NULL,
  `article_comment_status` char( 3 ) NOT NULL default 'off',
  PRIMARY KEY  (`article_id`),
  UNIQUE KEY `article_trans_title` (`article_trans_title`),
  FULLTEXT KEY `article_title` (`article_title`,`article_content`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT= 22  ; 
...
Рейтинг: 0 / 0
24.09.2005, 17:47:45
    #33287180
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с написанием запроса (MySQL)
не проверял
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT `article_id` , `article_title`, `article_trans_title`, `article_comment_status`,
if(article_content.article_comment_status="off", 0 ,count(comment_content.comment_assoc_id)) article_comment_counter
FROM `article_content`,`comment_option` LEFT JOIN `comment_content`
ON `section_id`='2' and ( (article_content.article_comment_status="off")
or (article_content.article_comment_status="on"
and comment_option.comment_parent_trants_title=article_content.article_trans_title
and comment_option.comment_parent_mod="article"
and comment_content.comment_assoc_id=comment_option.comment_assoc_id) )
GROUP BY article_content.article_trans_title ORDER BY `article_title` ASC
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
24.09.2005, 22:48:34
    #33287243
Pavel Trizno
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с написанием запроса (MySQL)
maXmoне проверял
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT `article_id` , `article_title`, `article_trans_title`, `article_comment_status`,
if(article_content.article_comment_status="off", 0 ,count(comment_content.comment_assoc_id)) article_comment_counter
FROM `article_content`,`comment_option` LEFT JOIN `comment_content`
ON `section_id`='2' and ( (article_content.article_comment_status="off")
or (article_content.article_comment_status="on"
and comment_option.comment_parent_trants_title=article_content.article_trans_title
and comment_option.comment_parent_mod="article"
and comment_content.comment_assoc_id=comment_option.comment_assoc_id) )
GROUP BY article_content.article_trans_title ORDER BY `article_title` ASC

Спасибо большое! Заработало! Только для правельного результата надо было еще WHERE `section_id`='2' добавить!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблемы с написанием запроса (MySQL) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]