Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: UPDATE с вложенным запросом.
 
 автор: Yakor   (12.05.2006 в 02:06)   письмо автору
 
 

Можно ли сделать такой вложенный запрос?
(*если да то как))))

UPDATE 'posts' SET 'forum_id' =4 WHERE (SELECT * FROM 'topics' WHERE 'forum_id' =4)

То есть всем постам которые находятся в топиках, которые расположенны в форуме #4 присвоить 'forum_id' =4

Зарание спасибо.

   
 
 автор: Loki   (12.05.2006 в 09:35)   письмо автору
 
   для: Yakor   (12.05.2006 в 02:06)
 

как-то так

UPDATE 'posts' SET 'forum_id' =4 WHERE post_id IN (SELECT post_id FROM 'topics' WHERE 'forum_id' =4)

   
 
 автор: Yakor   (12.05.2006 в 13:02)   письмо автору
 
   для: Loki   (12.05.2006 в 09:35)
 

Выдает ошибку... :(((


#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near ''posts' SET 'forum_id' =4 WHERE post_id IN (SELECT post_id FROM 

   
 
 автор: cheops   (12.05.2006 в 13:06)   письмо автору
 
   для: Yakor   (12.05.2006 в 13:02)
 

Здесь имеется ввиду запрос
UPDATE posts SET forum_id =4 WHERE post_id IN (SELECT post_id FROM topics WHERE forum_id =4)

PS У вас кстати MySQL какой версии?

   
 
 автор: Yakor   (12.05.2006 в 13:58)   письмо автору
 
   для: cheops   (12.05.2006 в 13:06)
 

Тоже не работает... выдает то же самое

MySQL 4.0.24

   
 
 автор: cheops   (12.05.2006 в 17:08)   письмо автору
 
   для: Yakor   (12.05.2006 в 13:58)
 

Вложенные запросы, кстати, на этой версии не работают, они появились начиная с MySQL 4.1.0.

   
 
 автор: Trianon   (12.05.2006 в 17:27)   письмо автору
 
   для: cheops   (12.05.2006 в 17:08)
 

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

   
 
 автор: cheops   (12.05.2006 в 17:47)   письмо автору
 
   для: Trianon   (12.05.2006 в 17:27)
 

Согласен. Единственное их преимущество - их просто составлять - и возможность использования NOT IN - при объединении нельзя получить записи, которые не вошли в объединение, а иногда нужно.

   
 
 автор: Trianon   (12.05.2006 в 17:57)   письмо автору
 
   для: cheops   (12.05.2006 в 17:47)
 

При соединении замечательно получаются записи, которые не вошли в соединение. Если сделать его внешним. LEFT JOIN . Или @= если без join, в терминах старого оракла. Последнее, правда, mysql врядли съест.

   
 
 автор: Trianon   (12.05.2006 в 10:16)   письмо автору
 
   для: Yakor   (12.05.2006 в 02:06)
 

какова структура таблиц posts и topics ?

   
 
 автор: Yakor   (12.05.2006 в 12:58)   письмо автору
 
   для: Trianon   (12.05.2006 в 10:16)
 

phpBB ...


Структура таблицы 'bb_posts'

CREATE TABLE 'bb_posts' (
  'post_id' mediumint(8) unsigned NOT NULL auto_increment,
  'topic_id' mediumint(8) unsigned NOT NULL default '0',
  'forum_id' smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  ('post_id'),
  KEY 'forum_id' ('forum_id'),
  KEY 'topic_id' ('topic_id'),




Структура таблицы 'bb_topics'

CREATE TABLE 'bb_topics' (
  'topic_id' mediumint(8) unsigned NOT NULL auto_increment,
  'forum_id' smallint(8) unsigned NOT NULL default '0',
  PRIMARY KEY  ('topic_id'),
  KEY 'forum_id' ('forum_id'),

   
 
 автор: Trianon   (12.05.2006 в 13:08)   письмо автору
 
   для: Yakor   (12.05.2006 в 12:58)
 

Я бы написал так:

UPDATE posts JOIN  topics ON posts.topic_id = topics.topic_id 
SET posts.forum_id = nnnnn 
WHERE topics.forum_id = nnnn
или так:

UPDATE posts, topics 
SET posts.forum_id = nnnnn 
WHERE posts.topic_id = topics.topic_id AND topics.forum_id = nnnn


Без вложенного запроса.
Многотабличный UPDATE разрешен с версии 4.0.4 если не ошибаюсь.

   
 
 автор: Yakor   (12.05.2006 в 14:07)   письмо автору
 
   для: Trianon   (12.05.2006 в 13:08)
 

Спасибо огромное!

Просто я переносил форум с бюлютени на пхпбб вручную и столкнулся с такой штукой, что у них очень отличается всё)))))
Короче перенес посты, а в бюлютени такой штуки как forum_id в таблице с постами - нет.

В итоге вышло что на главной показывается только кол-во топиков и пишет что всего постов 0.

Вообщем еще раз огромное спасибо!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования