Перейти к содержимому


Фотография

Подскажите с mysql-запросом

Форумы IBResource

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8
Unico
  • Участники
  • Cообщений: 149
  • http://

Отправлено

Надо выбрать
1. в определенном разделе форума
2. где встречается искомое слово в сообщении
2. все сообщения определенного пользователя до определенной даты
3. и поменять этим сообщениям автора (author_id и name)

и дополнительно

4. поменять топикстартера в таких темах, поскольку пост изменится, но надо еще автора темы поменять

Arhar
  • Команда форума
  • Cообщений: 5 631

Отправлено

скорее всего скрипт писать отдельно будет проще всего
сначала селект ид, топик_ид из постов, а потом два запроса, отдельно на автора и отдельно на тему
как я помню, признак форума хранится в таблице тем, поэтому запрос вида
SELECT p.id, p.topic_id FROM ibf_posts p LEFT JOIN ibf_topics t ON (t.id=p.topic_id) WHERE t.forum_id=___FORUM__ID___ AND p.post LIKE '%__WORD__%' AND p.author_id=___AUTHOR__ID___ AND p.date<'___UNIX_FORMAT_DATE___'

все это исключительно из головы, так что имена полей могут быть другими

FatCat
  • Клиенты
  • Cообщений: 3 351
  • http://pharm-forum.ru
  • Город:נצרת עילית

Отправлено

как я помню, признак форума хранится в таблице тем

В таблице сообщений ibf_posts хранится и айдишник темы topic_id, и айдишник форума forum_id.
Но одним запросом конечно же не получится. Мне видится как минимум 7 запросов.
Первым запросом собрать массив айдишников постов, удовлетворяющих условиям, и одновременно массив айдишников топиков.
Вторым запросом собрать массив айдишников первых постов топиков из массива.
Третьим запросом собрать массив последних постов в топиках, выбрав только те, которые удовлетворяют условиям. Одновременно собрать массив топиков, у которых последние посты меняют авторство.
Четвертым запросом изменить авторство постов, полученных первыми двумя запросами.
Пятым запросом изменить поле starter_id в таблице топиков.
Шестым запросом изменить поле last_poster_id в таблице топиков для топиков, полученных третьим запросом.
И наконец седьмым запросом изменить поля last_poster_id и last_poster_name в таблице форумов для тех записей, в которых поле last_id в массиве топиков, изменивших авторство последнего поста.

Arhar
  • Команда форума
  • Cообщений: 5 631

Отправлено

насчет автора темы задающий вопрос сказал как-то мутно и непонятно - надо менять автора темы у любой темы, или только у той, которую открыл искомый юзер

P.S.

В таблице сообщений ibf_posts хранится и айдишник темы topic_id, и айдишник форума forum_id.

уверен что не ты сам это сделал?
2.1:
CREATE TABLE `ibf_posts` (
`pid` int(10) NOT NULL auto_increment,
`append_edit` tinyint(1) default '0',
`edit_time` int(10) default NULL,
`edit_reason` varchar(255) NOT NULL default '',
`author_id` mediumint(8) NOT NULL default '0',
`author_name` varchar(32) default NULL,
`use_sig` tinyint(1) NOT NULL default '0',
`use_emo` tinyint(1) NOT NULL default '0',
`ip_address` varchar(16) NOT NULL default '',
`mac_address` varchar(255) default '',
`post_date` int(10) default NULL,
`icon_id` smallint(3) default NULL,
`post` text,
`queued` tinyint(1) NOT NULL default '0',
`topic_id` int(10) NOT NULL default '0',
`post_title` varchar(255) default NULL,
`new_topic` tinyint(1) default '0',
`edit_name` varchar(255) default NULL,
`post_key` varchar(32) NOT NULL default '0',
`post_parent` int(10) NOT NULL default '0',
`post_htmlstate` smallint(1) NOT NULL default '0',
PRIMARY KEY (`pid`),
KEY `topic_id` (`topic_id`,`queued`,`pid`),
KEY `author_id` (`author_id`,`topic_id`),
KEY `post_date` (`post_date`),
FULLTEXT KEY `post` (`post`)
) ENGINE=MyISAM


(тут несколько добавлено мной, но ничего не удалено)

FatCat
  • Клиенты
  • Cообщений: 3 351
  • http://pharm-forum.ru
  • Город:נצרת עילית

Отправлено

уверен что не ты сам это сделал?

ipb\upload\sm_install.php:
$SQL[] = "CREATE TABLE ibf_posts (
pid int(10) NOT NULL auto_increment,
append_edit tinyint(1) default '0',
edit_time int(10) default NULL,
author_id mediumint(8) NOT NULL default '0',
author_name varchar(32) default NULL,
use_sig tinyint(1) NOT NULL default '0',
use_emo tinyint(1) NOT NULL default '0',
ip_address varchar(16) NOT NULL default '',
post_date int(10) default NULL,
icon_id smallint(3) default NULL,
post text,
queued tinyint(1) default NULL,
topic_id int(10) NOT NULL default '0',
forum_id smallint(5) NOT NULL default '0',
attach_id varchar(64) default NULL,
attach_hits int(10) default NULL,
attach_type varchar(128) default NULL,
attach_file varchar(255) default NULL,
post_title varchar(255) default NULL,
new_topic tinyint(1) default '0',
edit_name varchar(255) default NULL,
has_modcomment TINYINT(1) DEFAULT '0' NULL,
PRIMARY KEY (pid),
KEY topic_id (topic_id,author_id),
KEY author_id (author_id),
KEY forum_id (forum_id,post_date),FULLTEXT KEY post (post)
) TYPE=MyISAM;";

Это из дистрибутива 1.3

Arhar
  • Команда форума
  • Cообщений: 5 631

Отправлено

интересно, почему они убрали это в 2.1

FatCat
  • Клиенты
  • Cообщений: 3 351
  • http://pharm-forum.ru
  • Город:נצרת עילית

Отправлено

В двушке сделали многоуровневую вложенность подфорумов, под это видимо поменяли архитектуру.

Unico
  • Участники
  • Cообщений: 149
  • http://

Отправлено

Ух, как сложно )
вопрос попроще...

мне надо в тестовой копии форума,
которая будет отдаваться для разработки модов поменять у всех юзеров пароли на какой-то один
и емейлы на какой-то один... удалять мемберов нежелательно, их кол-во важно для теста модов.

как это сделать? что-то с replace

напомню
таблица ibf_members
поля
password email

FatCat
  • Клиенты
  • Cообщений: 3 351
  • http://pharm-forum.ru
  • Город:נצרת עילית

Отправлено

Один запрос. UPDATE ibf_members SET password="qwerty", email="no@spam.me" where mid>0
Имена полей только проверьте, писал по памяти.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных