Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2008, 19:56   #1
silvereye
Новичок
Джуниор
 
Регистрация: 02.09.2008
Сообщений: 2
Вопрос помогите пожалуйста с запросом

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

DELETE FROM phpbb_topics AS t WHERE 0 = ( SELECT count(post_id) FROM phpbb_posts AS p WHERE t.topic_id = p.topic_id );

но он не работает, пишет : #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 'WHERE 0 = ( SELECT count(post_id) FROM phpbb_posts AS p WHERE t.topic_id = p.top' at line 1

Версия MySQL-клиента: 5.1.22-rc
silvereye вне форума Ответить с цитированием
Старый 03.09.2008, 09:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попробуйте сначала такой запрос:
Код:
SELECT * FROM phpbb_topics AS t WHERE  t.topic_id IN ( SELECT p.topic_id FROM phpbb_posts AS p HAVING count(post_id)=0 GROUP BY  p.topic_id);
я его набросал прямо здесь, не проверяя. Если всё отработает (он должен вернуть пустые топики)
тогда можете удалять:
Код:
DELETE FROM phpbb_topics AS t WHERE  t.topic_id IN ( SELECT p.topic_id FROM phpbb_posts AS p HAVING count(post_id)=0 GROUP BY  p.topic_id);
p.s. хотя я бы предварительно всё равно сделал backup...
на всякий случай ;-)

Последний раз редактировалось Serge_Bliznykov; 03.09.2008 в 09:58.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.09.2008, 11:25   #3
silvereye
Новичок
Джуниор
 
Регистрация: 02.09.2008
Сообщений: 2
Печаль не получается :(

к сожалению запрос - SELECT * FROM phpbb_topics AS t WHERE t.topic_id IN ( SELECT p.topic_id FROM phpbb_posts AS p HAVING count(post_id)=0 GROUP BY p.topic_id);

вернул ошибку - #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 'GROUP BY p . topic_id )
LIMIT 0, 30' at line 1
silvereye вне форума Ответить с цитированием
Старый 03.09.2008, 13:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а попробуйте переставить местами having и group by
сначал такой запрос:
Код:
SELECT p.topic_id FROM phpbb_posts p GROUP BY p.topic_id HAVING count(post_id)=0
если пройдёт, тогда этот:
Код:
SELECT * FROM phpbb_topics AS t WHERE  t.topic_id IN (SELECT p.topic_id FROM phpbb_posts p GROUP BY p.topic_id HAVING count(post_id)=0)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.09.2008, 18:16   #5
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

Я б зделал так
Код:
DELETE FROM phpbb_topics 
WHERE not exists(SELECT * FROM phpbb_posts WHERE phpbb_topics.topic_id =topic_id);
Domovoy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста,помогите с запросом kikoz SQL, базы данных 1 12.09.2008 15:18
Помогите с запросом Айвенго Microsoft Office Access 3 08.05.2008 09:07
Помогите с запросом Blackmore БД в Delphi 3 07.05.2008 01:18
Помогите с SQL запросом. Monoflextor БД в Delphi 12 29.04.2007 16:53
помогите с запросом 9-11 БД в Delphi 4 20.11.2006 10:04