web-dev-qa-db-fra.com

Requête Mysql LIKE ne fonctionne pas

J'utilise ce code.

$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 );

Mais cette instruction LIKE AND UPPER(blog_name) LIKE 'A%'" ne fonctionne pas. Quelqu'un peut-il me donner la solution?

Merci

Mettre à jour:

En fait, j'utilise ce code

$where = ''; 
if ($filter) { 
$where = "AND UPPER(blog_name) LIKE '".strtoupper($filter)."%' "; 
}

Donc, je vais remplacer AND UPPER(blog_name) LIKE 'A%'" par $where plus tard

Remarque: j'ai plus de 500 blogs dans mon réseau.

Je souhaite afficher tous les noms de blog avec un lien d'ancrage dans une page. Mais je ne veux pas charger tous les noms de blog. J'essaie donc de réaliser une navigation alphabétique. Si l'utilisateur clique sur le lien "A", la page doit afficher les noms de blogs commençant par "A". De même B, C, etc.

Voici le code complet si quelqu'un est intéressé

1
Giri

Préparez vos requêtes!

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
);

N'envoyez jamais de données sans préparer! De plus, certaines fonctions, comme like_escape(), vous aideront à préparer les données correctement.

Vous vous demandez toujours pourquoi vous souhaitez rechercher quelque chose comme A%

3
kaiser

Ce que @kaiser a dit en plus:

Dans cette table, il n'y a pas de champ blog_name ... Il semble que votre requête comprenne un autre code SQL, mais sans cela, nous ne pouvons pas dire ce qui ne va pas.

where is blog_name

Mettre à jour Le nom du blog se trouve uniquement dans le tableau des options de blogs individuels. Donc, pour faire ce que vous êtes après, vous devez faire ceci:

Lisez tous vos identifiants de blog qui sont public = 1 && achieved = 0 && mature = 0 && spam = 0 && deleted = 0. C'est une requête qui, dans votre cas, renverrait environ 500 enregistrements. Ensuite, avec chaque enregistrement, vous devez lire chaque table d'options de blog {prefix}_{ID}_options et rechercher la ligne qui a un option_name = 'blogname', puis vérifier si cet enregistrement commence par la lettre de votre choix.

Peut-être que ce qui précède est possible dans une requête MySQL massive, mais je détesterais être celui qui la mettrait ensemble.

Je ne peux pas aider plus loin. Si je cherchais à faire ce que vous voulez, je créerais un nouveau tableau et le tiendrais au courant des informations à rechercher. J'utilisais les points d'ancrage disponibles pour m'assurer que lorsqu'un nouveau site serait ajouté/mis à jour/supprimé, il mettrait à jour le tableau que j'avais créé.

1
Brady