Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Нужен запрос в sql

Тема в разделе "Вопросы- ответы", создана пользователем lenar, 15 сен 2016.

15.09.16 в 15:02
15.09.16 в 16:15
21
3.416
0
  1. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    Ребят, есть среди Вас те кто в запросах sql шарит? Нужно данный запрос
    SELECT * FROM `wp_postmeta` WHERE meta_key="key1" and post_id=any(SELECT post_id FROM `wp_postmeta` where meta_key="key2" and meta_value="")
    превратить из select в delete. Сам пробовал, но там не все так просто, так как sql не дает обновить ту же самую таблицу, из которой происходит чтение. По ошибке все и вся ссылается на это, но мне это никак не помогает((

    Готов кинуть соточку на пиво, кто поможет)
     
  2. PunPun

    PunPun VIP Кинотрафик v2

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    Код:
    DELETE FROM `wp_postmeta` WHERE meta_key="key1" and post_id=any(SELECT post_id FROM `wp_postmeta` where meta_key="key2" and meta_value="")
    По идеи так, или что именно нужно?
     
  3. badkidddd

    badkidddd Посетитель

    Сообщения:
    86
    Симпатии:
    8
    Лучших ответов:
    0
    Не очень полинял тебя, можешь сказать словами что тебе надо сделать? и какой селект заменить на delete?
    Пример:
    Хочу выбрать из таблицы `wp_postmeta` все поля, где meta_key="key1" и т.д. ....
     
  4. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    @Gameer, вот я так же пробовал)) Выходит ошибка Can't specify target table for update in FROM clause, ссылку на описание ошибки кинул выше. Там предлагают через два select`a или через join намутить. Проблема в том, что читаем одну таблицу и одновременно пытаемся ее же редактировать. Тут и ошибка. Вроде написано как обойти, но не доходит.
     
  5. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    @badkidddd, нужно первый селест заменить на делете. Остальная логика остается той же. Select отрабатывает правильно, как нужно. В целом можно даже уже в phpmyadmin ручками удалять(выделил, удалил) - но это пздц геморойно.
     
  6. badkidddd

    badkidddd Посетитель

    Сообщения:
    86
    Симпатии:
    8
    Лучших ответов:
    0
    эм, на счет полей "meta_key", key1 и key2 разные? если так то сама логика запроса не правильная.
     
  7. PunPun

    PunPun VIP Кинотрафик v2

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    Код:
    SELECT @postid = post_id FROM `wp_postmeta` where meta_key="key2" and meta_value="";
    DELETE FROM `wp_postmeta` WHERE meta_key="key1" and post_id IN(@postid);
     
  8. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    @Gameer, Чувствую победа близка) Но есть проблема. Ошибок нет при выполнении, но не возвращает ничего, ничего не удаляет. Выполнил сначала первый запрос, вернул все необходимые строчки, но @postid возвращается как null. Что сделать, чтобы вернуло нормальный индекс?
     
  9. badkidddd

    badkidddd Посетитель

    Сообщения:
    86
    Симпатии:
    8
    Лучших ответов:
    0
    @lenar, естественно ни чего не вернет, не может же быть одна запись с разными "meta_key"!!!
     
  10. PunPun

    PunPun VIP Кинотрафик v2

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    таки да.
    тебе какие записи и с какими данными удалить надо?
     
  11. progmaster

    progmaster Забанен

    Сообщения:
    202
    Симпатии:
    87
    Лучших ответов:
    0
    Зачем такое городить?))) если можно просто
    DELETE FROM `wp_postmeta` WHERE meta_key="key1" and meta_value=""
     
  12. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    Правильно. Тут разные записи, с разными meta_key, но в зависимости от пустоты одного, нужно удалить второй)

    В общем: Есть таблица, Четыре столбца(meta_id, post_id, meta_key и meta_value). Интересуют записи где в столбцах meta_key находятся значения "key" и "_key". Если для записи с meta_key="key", значение meta_value="0", то нужно удалить запись с meta_key="_key". При этом у этих записей с различными meta_key("key" и "_key"), одинаковые post_id.

    Если на пальцах, то вот: http://prnt.sc/ciague
     
  13. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    Необходимость удаления одной строки зависит от значений в другой, поэтому надо все это городить))
     
  14. progmaster

    progmaster Забанен

    Сообщения:
    202
    Симпатии:
    87
    Лучших ответов:
    0
    Структуру таблицы хоть приведи, а то так вообще не понятно что куда и зачем)
     
  15. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    http://prnt.sc/ciaivh
     
  16. PunPun

    PunPun VIP Кинотрафик v2

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    Код:
    SELECT @postid:=post_id FROM `wp_postmeta` where meta_key="key2" and meta_value="";
    DELETE FROM `wp_postmeta` WHERE meta_key="key1" and post_id IN(@postid);
     
  17. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    @Gameer, еще ближе)) сейчас первый запрос нормально выдает весь список, с нормальными значениями. Но второй запрос ничего не удаляет((
     
  18. PunPun

    PunPun VIP Кинотрафик v2

    Сообщения:
    7.433
    Симпатии:
    3.687
    Лучших ответов:
    32
    Точнее так
    Код:
    SELECT @postid:=GROUP_CONCAT(post_id SEPARATOR ",") FROM `wp_postmeta` where meta_key="key2" and meta_value="";
    DELETE FROM `wp_postmeta` WHERE meta_key="key1" and post_id IN(@postid);
    
     
  19. progmaster

    progmaster Забанен

    Сообщения:
    202
    Симпатии:
    87
    Лучших ответов:
    0
    DELETE t1
    FROM `wp_postmeta` t1
    JOIN `wp_postmeta` t2 ON t2.post_id = t1.post_id WHERE t1.meta_key="key1" AND t2.meta_key="key2" AND t2.meta_value=""
     
  20. TopicStarter Overlay
    lenar

    lenar Команда форума VIP Кинотрафик v2

    Сообщения:
    306
    Симпатии:
    114
    Лучших ответов:
    0
    @Gameer, опять не хочет. Первый запрос вывел по типу этого http://prnt.sc/ciavc3. Там ничего, что они не в кавычках? Может из-за этого?
     
Похожие темы
  1. Kollogroes
    Ответов:
    6
    Просмотров:
    1.728
  2. Uralbox
    Ответов:
    17
    Просмотров:
    3.816
  3. vasili
    Ответов:
    9
    Просмотров:
    823
Загрузка...