Я перемещаю древний сайт со слишком старой версией Wordpress плюс некоторый собственный PHP-код на более новый сервер. Я не был тем, кто создал сайт, и я пытаюсь внести минимальные изменения, необходимые для его работы. Прямо сейчас, это бросает ошибку MySQL. Здесь заданный вопрос:
SELECT 'wp_posts'.'post_title' as title, 'wp_posts'.'post_date' as date, 'wp_posts'.'post_name' as slug
FROM 'wp_posts', 'wp_categories'
JOIN 'wp_post2cat' ON 'wp_posts'.'ID' = 'wp_post2cat'.'post_id'
WHERE wp_categories.cat_name = 'Stories'
AND 'wp_post2cat'.'category_id' = 'wp_categories'.'cat_ID'
ORDER BY date DESC
LIMIT 0,10;
Вставка этого запроса в PHPMyAdmin вызывает следующую ошибку:
#1054 - Unknown column 'wp_posts.ID' in 'on clause'
Это явно неверная ошибка, так как wp_posts.ID действительно существует, и запрос работал на старом хосте (который, вероятно, работал с более старой версией MySQL).
Итак, поскольку сообщение об ошибке неверно, какова настоящая проблема?
Версия MySQL: 10.2.13-MariaDB-10.2.13+maria~xenial - mariadb.org
В ответ на комментарий здесь представлена структура таблиц:
CREATE TABLE 'wp_posts' (
'ID' bigint(20) unsigned NOT NULL AUTO_INCREMENT,
'post_author' bigint(20) NOT NULL DEFAULT 0,
'post_date' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
'post_date_gmt' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
'post_content' longtext NOT NULL,
'post_title' text NOT NULL,
'post_category' int(4) NOT NULL DEFAULT 0,
'post_excerpt' text NOT NULL,
'post_status' enum('publish','draft','private','static','object','attachment','inherit','future') NOT NULL DEFAULT 'publish',
'comment_status' enum('open','closed','registered_only') NOT NULL DEFAULT 'open',
'ping_status' enum('open','closed') NOT NULL DEFAULT 'open',
'post_password' varchar(20) NOT NULL DEFAULT '',
'post_name' varchar(200) NOT NULL DEFAULT '',
'to_ping' text NOT NULL,
'pinged' text NOT NULL,
'post_modified' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
'post_modified_gmt' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
'post_content_filtered' text NOT NULL,
'post_parent' bigint(20) NOT NULL DEFAULT 0,
'guid' varchar(255) NOT NULL DEFAULT '',
'menu_order' int(11) NOT NULL DEFAULT 0,
'post_type' varchar(20) NOT NULL DEFAULT 'post',
'post_mime_type' varchar(100) NOT NULL DEFAULT '',
'comment_count' bigint(20) NOT NULL DEFAULT 0,
PRIMARY KEY ('ID'),
KEY 'post_name' ('post_name'),
KEY 'type_status_date' ('post_type','post_status','post_date','ID')
) ENGINE=MyISAM AUTO_INCREMENT=54 DEFAULT CHARSET=utf8
,
CREATE TABLE 'wp_categories' (
'cat_ID' bigint(20) NOT NULL AUTO_INCREMENT,
'cat_name' varchar(55) NOT NULL DEFAULT '',
'category_nicename' varchar(200) NOT NULL DEFAULT '',
'category_description' longtext NOT NULL,
'category_parent' bigint(20) NOT NULL DEFAULT 0,
'category_count' bigint(20) NOT NULL DEFAULT 0,
'link_count' bigint(20) NOT NULL DEFAULT 0,
'posts_private' tinyint(1) NOT NULL DEFAULT 0,
'links_private' tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY ('cat_ID'),
KEY 'category_nicename' ('category_nicename')
) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf8
,
CREATE TABLE 'wp_post2cat' (
'rel_id' bigint(20) NOT NULL AUTO_INCREMENT,
'post_id' bigint(20) NOT NULL DEFAULT 0,
'category_id' bigint(20) NOT NULL DEFAULT 0,
PRIMARY KEY ('rel_id'),
KEY 'post_id' ('post_id','category_id')
) ENGINE=MyISAM AUTO_INCREMENT=166 DEFAULT CHARSET=utf8
Попробуйте удалить wp_categories
в вашем FROM
и вместо этого используйте JOIN
для таблицы.
SELECT wp_posts.post_title as title, wp_posts.post_date as date, wp_posts.post_name as slug FROM wp_posts JOIN wp_post2cat ON wp_posts.ID = wp_post2cat.post_id JOIN wp_categories ON wp_posts.post_category = wp_categories.cat_ID WHERE wp_categories.cat_name = 'Stories' AND wp_post2cat.category_id = wp_categories.cat_ID ORDER BY date DESC LIMIT 0,10;
WHERE
чтобы увидеть, если вы получите результат. Если есть какие-либо проблемы с результатом, вы также должны взглянуть на данные в wp_post2cat
и wp_categories
. Оба соединения в основном являются INNER JOIN
, поэтому если нет соответствующих данных, вы не получите желаемого результата.
SHOW CREATE TABLE wp_posts;
(и, возможно, также изwp_categories
иwp_post2cat
всякий случай).