Запрос 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 и т.д.

Вот полный код , если кому-то интересно

Author: kaiser, 2012-02-11

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%...

 3
Author: kaiser, 2014-09-10 14:39:42

Что сказал @kaiser плюс:

В этой таблице нет поля blog_name... Похоже, что ваш запрос включает в себя какой-то другой SQL, но без этого мы не можем сказать, что происходит не так.

where is blog_name

Обновление Единственное место, где находится имя блога, - это таблица параметров отдельных блогов. Поэтому, чтобы сделать то, что вам нужно, вам придется сделать следующее:

Прочитайте все идентификаторы вашего блога, которые являются public = 1 && achieved = 0 && mature = 0 && spam = 0 && deleted = 0. Это один запрос, который в вашем случае вернет около 500 записи. Затем с каждой записью вам нужно будет прочитать каждую таблицу параметров блога {prefix}_{ID}_options и найти строку с option_name = 'blogname', а затем проверить, начинается ли эта запись с выбранной буквы.

Возможно, вышесказанное возможно в одном массивном запросе MySQL, но я бы не хотел быть тем, кто соберет его воедино.

Я больше ничем не могу помочь. Если бы я хотел сделать то, что вам нужно, я бы посмотрел на создание собственной новой таблицы и обновил ее информацией, которую мне нужно найти. Я бы использовал доступные крючки, чтобы убедиться, что при добавлении/обновлении/удалении нового сайта он обновит эту таблицу, которую я создал.

 1
Author: Scott, 2012-02-11 14:54:08