powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблемы с написанием запроса (MySQL)
8 сообщений из 8, страница 1 из 1
Проблемы с написанием запроса (MySQL)
    #33278285
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');

Таблица 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
Проблемы с написанием запроса (MySQL)
    #33279150
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы с написанием запроса (MySQL)
    #33279183
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблемы с написанием запроса (MySQL)
    #33280018
Pavel Trizno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Проблемы с написанием запроса (MySQL)
    #33280682
Fabel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
где-то в вопросе ошибка. Где таблица article_content, если о ней речь?
...
Рейтинг: 0 / 0
Проблемы с написанием запроса (MySQL)
    #33284769
Pavel Trizno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошу прощения!
Структура 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
Проблемы с написанием запроса (MySQL)
    #33287180
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
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Проблемы с написанием запроса (MySQL)
    #33287243
Pavel Trizno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблемы с написанием запроса (MySQL)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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