Почему этот запрос выдает ошибку? [Дубликат]

0

Я перемещаю древний сайт со слишком старой версией 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
  • 0
    Пожалуйста, вставьте вывод SHOW CREATE TABLE wp_posts; (и, возможно, также из wp_categories и wp_post2cat всякий случай).
  • 0
    @Amadan: Амадан: Готово ..
Показать ещё 4 комментария
Теги:
mariadb

1 ответ

1

Попробуйте удалить wp_categories в вашем FROM и вместо этого используйте JOIN для таблицы.

  • 0
    Я не писал код SQL напрямую в течение многих лет, поэтому я не уверен, правильно ли я написал свой запрос. Я выполнил следующий запрос и получил 0 строк, тогда как ожидал получить около 5: 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;
  • 1
    @ ScottSeverance Все выглядит хорошо. Но попробуйте без WHERE чтобы увидеть, если вы получите результат. Если есть какие-либо проблемы с результатом, вы также должны взглянуть на данные в wp_post2cat и wp_categories . Оба соединения в основном являются INNER JOIN , поэтому если нет соответствующих данных, вы не получите желаемого результата.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню