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

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

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

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

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

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

    Регистрация:
    28 дек 2015
    Сообщения:
    306
    Лучших ответов:
    0
    Рейтинги:
    +117 / 1 / -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

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

    Регистрация:
    11 июн 2015
    Сообщения:
    7.403
    Лучших ответов:
    32
    Рейтинги:
    +4.017 / 114 / -0
    Код:
    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 Посетитель

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

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

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

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

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

    badkidddd Посетитель

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

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

    Регистрация:
    11 июн 2015
    Сообщения:
    7.403
    Лучших ответов:
    32
    Рейтинги:
    +4.017 / 114 / -0
    Код:
    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

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

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

    badkidddd Посетитель

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

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

    Регистрация:
    11 июн 2015
    Сообщения:
    7.403
    Лучших ответов:
    32
    Рейтинги:
    +4.017 / 114 / -0
    таки да.
    тебе какие записи и с какими данными удалить надо?
     
  11. progmaster

    Забанен

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

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

    Регистрация:
    28 дек 2015
    Сообщения:
    306
    Лучших ответов:
    0
    Рейтинги:
    +117 / 1 / -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

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

    Регистрация:
    28 дек 2015
    Сообщения:
    306
    Лучших ответов:
    0
    Рейтинги:
    +117 / 1 / -0
    Необходимость удаления одной строки зависит от значений в другой, поэтому надо все это городить))
     
  14. progmaster

    Забанен

    Регистрация:
    15 июл 2016
    Сообщения:
    202
    Лучших ответов:
    0
    Рейтинги:
    +88 / 0 / -0
    Структуру таблицы хоть приведи, а то так вообще не понятно что куда и зачем)
     
  15. TopicStarter Overlay
    lenar

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

    Регистрация:
    28 дек 2015
    Сообщения:
    306
    Лучших ответов:
    0
    Рейтинги:
    +117 / 1 / -0
    http://prnt.sc/ciaivh
     
  16. PunPun

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

    Регистрация:
    11 июн 2015
    Сообщения:
    7.403
    Лучших ответов:
    32
    Рейтинги:
    +4.017 / 114 / -0
    Код:
    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

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

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

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

    Регистрация:
    11 июн 2015
    Сообщения:
    7.403
    Лучших ответов:
    32
    Рейтинги:
    +4.017 / 114 / -0
    Точнее так
    Код:
    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

    Забанен

    Регистрация:
    15 июл 2016
    Сообщения:
    202
    Лучших ответов:
    0
    Рейтинги:
    +88 / 0 / -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

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

    Регистрация:
    28 дек 2015
    Сообщения:
    306
    Лучших ответов:
    0
    Рейтинги:
    +117 / 1 / -0
    @Gameer, опять не хочет. Первый запрос вывел по типу этого http://prnt.sc/ciavc3. Там ничего, что они не в кавычках? Может из-за этого?
     
Похожие темы
  1. Sasha K-G
    Ответов:
    20
    Просмотров:
    2.930
  2. Karabas Barabas
    Ответов:
    29
    Просмотров:
    3.126
  3. mrmalik
    Ответов:
    14
    Просмотров:
    3.795
  4. vasili
    Ответов:
    3
    Просмотров:
    3.899
  5. Arthur
    Ответов:
    2
    Просмотров:
    4.829
Загрузка...
Яндекс.Метрика