Запрос Mysql ВРОДЕ не работает
Я использую этот код.
$blog_list = $wpdb->get_results( "SELECT " . $extra . "blog_id, last_updated FROM " . $wpdb->blogs. " WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted ='0' AND UPPER(blog_name) LIKE 'A%'" . $order . " " . $limit . "", ARRAY_A );
Но это утверждение ТИПА AND UPPER(blog_name) LIKE 'A%'"
не работает. Кто-нибудь может дать мне решение?
Спасибо
Обновление:
На самом деле я использую этот код
$where = '';
if ($filter) {
$where = "AND UPPER(blog_name) LIKE '".strtoupper($filter)."%' ";
}
Поэтому я заменю AND UPPER(blog_name) LIKE 'A%'"
на $where
позже
Примечание: В моей сети более 500 блогов.
Я хочу отобразить все названия блогов с привязкой ссылки на странице. Но я не хочу загружать все названия блогов. Поэтому я пытаюсь добиться алфавитного навигация. Если пользователь нажимает ссылку "А", то на странице должны отображаться имена блогов, начинающиеся с "А". Аналогично B, C и т.д.
Вот полный код , если кому-то интересно
2 answers
Подготовьте свои запросы!
global $wpdb;
$wpdb->get_results(
$wpdb->prepare(
"SELECT %s blog_id, last_updated FROM %s WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted ='0' AND UPPER(blog_name) LIKE '%s' %s %s ", ARRAY_A
),
$extra,
$wpdb->blogs,
$wpdb->esc_like( 'A%' ),
$order,
$limit
);
Никогда не отправляйте данные без подготовки! Также: Есть некоторые функции, такие как like_escape()
, которые помогут вам правильно подготовить данные.
Все еще интересно, почему вы хотите искать что-то вроде A%
...
Что сказал @kaiser плюс:
В этой таблице нет поля blog_name... Похоже, что ваш запрос включает в себя какой-то другой SQL, но без этого мы не можем сказать, что происходит не так.
Обновление Единственное место, где находится имя блога, - это таблица параметров отдельных блогов. Поэтому, чтобы сделать то, что вам нужно, вам придется сделать следующее:
Прочитайте все идентификаторы вашего блога, которые являются public = 1 && achieved = 0 && mature = 0 && spam = 0 && deleted = 0
. Это один запрос, который в вашем случае вернет около 500 записи. Затем с каждой записью вам нужно будет прочитать каждую таблицу параметров блога {prefix}_{ID}_options
и найти строку с option_name = 'blogname'
, а затем проверить, начинается ли эта запись с выбранной буквы.
Возможно, вышесказанное возможно в одном массивном запросе MySQL, но я бы не хотел быть тем, кто соберет его воедино.
Я больше ничем не могу помочь. Если бы я хотел сделать то, что вам нужно, я бы посмотрел на создание собственной новой таблицы и обновил ее информацией, которую мне нужно найти. Я бы использовал доступные крючки, чтобы убедиться, что при добавлении/обновлении/удалении нового сайта он обновит эту таблицу, которую я создал.