Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
46 / 13 / 3
Регистрация: 29.09.2013
Сообщений: 289
1

Эквивалент мультиудаления на PostgreSQL

08.07.2014, 18:50. Показов 1217. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Помогите пож создать эквивалент сего:
SQL
1
2
3
4
5
6
7
DELETE a, b FROM wp_options a, wp_options b 
WHERE
a.option_name LIKE '\_transient\_%' AND
a.option_name NOT LIKE '\_transient\_timeout\_%' 
AND
b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
AND b.option_value < 1404829282;
Здесь заменить мультиудаление не главная проблема.

Преобразование строки в число выдаёт ошибку, т.к. НЕ все значения в таблице можно преобразовать к инту.
Т.е. вот так не получится:
SQL
1
AND b.option_value::INTEGER < 1404829282
В эту колонку option_value типом текст, пишется что-попало. Урлы, т.п.

Думаю считать сначала в массив PHP типа вот так:
SQL
1
2
3
4
5
6
7
SELECT * FROM wp_options a, wp_options b 
WHERE
a.option_name LIKE '\_transient\_%' AND
a.option_name NOT LIKE '\_transient\_timeout\_%' 
AND
b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
-- AND b.option_value < 1404829282;
Обработать в PHP это сравнение, и далее DELETE вторым запросом.
Может можно по нормальному, средствами Postgres?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2014, 18:50
Ответы с готовыми решениями:

Эквивалент JOIN (table1, table2) на PostgreSQL
Здравствуйте. Запрос майэскюэльный: SELECT ID FROM wp_posts JOIN (wp_term_relationships,...

Эквивалент щелочи
На нейтрализацию 20 мл раствора, содержащегося в одном литре 12 г щелочи, было израсходовано 24 мл...

Эквивалент числа
Хотелось бы понять поподробнее что тут происходит. В смысле сам процесс чуть ли не по строкам....

Эквивалент в C++ Builder
Ребят, помогите пожалуйста преобразовать данный код под C++ Builder var AWidth, AHeight,...

4
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
259 / 223 / 109
Регистрация: 07.07.2014
Сообщений: 965
08.07.2014, 18:57 2
Лучший ответ Сообщение было отмечено Dexel как решение

Решение

Мультиудаления в постгресе нет, - забудьте.

Если нужно удалить из нескольких таблиц, правильный код выглядит так:
SQL
1
2
3
4
BEGIN;
DELETE FROM table1;
DELETE FROM table2;
COMMIT;
Полагаю написать необходимые условия для этих функций - проблем не составит.

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

Проверка может выглядеть например так:
SQL
1
AND b.option_value ~ '^[0-9]+$' AND b.option_value::INT < 1404829282
0
46 / 13 / 3
Регистрация: 29.09.2013
Сообщений: 289
09.07.2014, 05:28  [ТС] 3
Да, регуляркой получилось обойти ошибку типа.
А не подскажите как смешать в этом запросе колонки в одну?
SQL
1
2
3
4
SELECT a.option_id, b.option_id FROM wp_options a, wp_options b WHERE         a.option_name LIKE '\_transient\_%' AND
a.option_name NOT LIKE '\_transient\_timeout\_%'
AND b.option_name = CONCAT('_transient_timeout_', SUBSTRING(a.option_name, 12))          
AND (b.option_value ~ '^[0-9]+$') AND b.option_value::INTEGER < 1404837916;
option_id | option_id
-----------+-----------
203 | 202
205 | 204
117 | 116
119 | 118
121 | 120
123 | 122
125 | 124
127 | 126
191 | 190
193 | 192
195 | 194
197 | 196
199 | 198
201 | 200

Т.е. список идэшников получить для DELETE IN(...)
Тут НЕ разрулили
PS. Мне известно, что там где PostgreSQL ругается, там mysql работает но результат не предсказуем. Но как быть здесь ?
0
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
259 / 223 / 109
Регистрация: 07.07.2014
Сообщений: 965
09.07.2014, 10:25 4
Лучший ответ Сообщение было отмечено Dexel как решение

Решение

Запрос читать лень. Вкратце - можно сделать через постгресовые массивы, типа:

SQL
1
2
SELECT UNNEST(ARRAY[filed1, field2])
...
0
46 / 13 / 3
Регистрация: 29.09.2013
Сообщений: 289
09.07.2014, 11:03  [ТС] 5
Спасибо!
0
09.07.2014, 11:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2014, 11:03
Помогаю со студенческими работами здесь

Эквивалент ListArray в C++
У меня имеется метод в который постепенно(при вызове) попадают данные(2 байта), эти 2 байта почему...

To_string эквивалент
http://www.cplusplus.com/reference/string/to_string/ это из С++ 11. У меня вс 2010, очевидно...

Текстовый эквивалент числа
Здравствуйте. Поделитесь, пожалуйста, кому не жалко функцией вывода текстового эквивалента числа...

Эквивалент document.all[] в Netscape ?
в IE мoжнo иметь дoступ к любым елементу пo егo ID document.all a кaк етo делaт в Netscape?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru