Верстальщик любитель взялся за сложный проект. С MySQL знаком очень поверхностно. Задача такая:
Нужно извлечь все значения поля created из всех строк с catid != 16 таблицыjos_contentи в таблицеwp_posts поменять значениеpost в поле post_typeна значение pageво всех строках, в которых значение поляpost_date соответствует найденному в исходной таблице. Короче, этакая модификация функции vlookup из excel, только с помощью MySQL запроса в панели phpmyadmin.
Очень надеюсь, что мне удалось сформулировать условия (сам перечитал — понял, а это показатель). Огромное спасибо заранее.
Вот ведь. Совсем забыл упомянуть:
Эти таблицы находятся разных БД — соответственно в adminjc и adminwp
Прошу прощение за то, что упустил такой важный момент.
Я так понимаю, что именно из-за того, что это не учтено, по первому варианту из ответов выдаёт #1046 — No database selected
Вам бы php/mysql программера в команду. Без обид, но если _такого_ уровня вопросы возникают, то поверьте — косяков в _сложном_ проекте Вы наделаете навалом.
По сути вопроса: нечто вроде такого
update wp_posts set post_type='page' where post_type='post' and post_date in (select `created` from jost_content where catid<.16)
Спасибо, сейчас попробую. А по поводу программера в команду, было бы отлично, но я просто одинокий начинающий верстальщик, которому судьба подкинула работу по переезду с одного движка на другой. Платят настолько мало, что о команде речи не идёт. Спасибо.
#1046 — No database selected
Я так понимаю, что это из-за того, что я, лопух, забыл упомянуть про то, что таблицы в разных БД (на одном локальном сервере). Если не сложно, еще несколько минут уделите мне.
Спасибо в любом случае
объединил в одну БД. Всё сделал, но в результате поменялась только одна строка (если я правильно понимаю 1 row(s) affected. ( Query took 0.1479 sec )). Что я сделал не так?
Что бы работать с разными БД, имена таблиц можно указывать как adminjc.jos_content и adminwp.wp_posts
Что касается почему апдейт произошел только одной строки. Во первых, там хабрапарсер сожрал кусок, напишите catid not in (16). А во вторых, а Вы уверены что должно было поменяться больше? created и post_date задаются там с точностью до секунды насколько мы помним, совпадение в целом маловероятно, хотя можем ошибаться по памяти.
я перенес весь контент со старого сайта на новый (отдельная история), но в отличие от wordpress, joomla не разделяет чётко контент на посты и страницы. Я вручную проверил Есть порядка 2000 совпадений по данным значениям.
Изменил catid<.16) на catid not in (16). Теперь ошибка #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 '' at line 1
Но я чувствую, что уже близок )
update wp_posts set post_type='page' where post_type='post' and post_date in (select `created` from jost_content where catid not in (16) )
Или используйте вариант что Vampiro выше написал
Все поля названы по дефолту CMS-ками. Дефисов там нет, конечно, а вот подчеркивание довольно часто. То что в вопросе — опечатка (хотя тщательно проверял, но видать не обратил внимания). Впредь буду внимательнее. Спасибо.