web-dev-qa-db-fra.com

Ordre par valeur dans un champ personnalisé sérialisé

C'est un problème embêtant ici. J'ai repris un site contenant plusieurs informations, sérialisées, dans un champ personnalisé. Par exemple:

if ($new_query->have_posts()) : 

            while ($new_query->have_posts()) : $new_query->the_post(); 

                $ids[] = get_post_custom( get_the_ID() );
                print_r($product_custom_fields['item_data']);

            endwhile;

        endif;

Renverrait quelque chose comme:

{i:0;s:0:"";s:13:"regular_price";s:4:"1000";s:10:"sale_price";s:0:"";s:6:"weight";s:0:"";s:10:"tax_status";s:7:"taxable";s:9:"tax_class";s:0:"";s:12:"stock_status";s:7:"instock";s:12:"manage_stock";s:3:"yes";s:10:"backorders";s:2:"no";} 

J'aimerais pouvoir exécuter une requête qui commande tous ces éléments par 'regular_price' mais ne peut pas déterminer le meilleur moyen d'y parvenir.

J'ai actuellement décidé de lancer une requête préliminaire:

$new_query = new WP_Query( $args );

        if ($new_query->have_posts()) : 

            while ($new_query->have_posts()) : $new_query->the_post(); 

                $ids[] =  get_the_ID();

            endwhile;

        endif;

Cela obtient tous les éléments corrects dans le tableau $ ids. Je peux ensuite exécuter une fonction qui triera ces identifiants dans l'ordre de mon choix, en fouillant dans les données sérialisées. Je peux alors courir:

 query_posts(array('post__in' => $ids) );

Ce qui filtrera mes principaux résultats en fonction des identifiants et de l'ordre que j'ai configurés.

Le problème est que cela interroge deux fois les messages et est potentiellement un peu long.

Si quelqu'un pouvait suggérer une méthode plus succincte, peut-être avec l'injection directe de SQL dans la requête, ce serait très apprécié.

2
mjjwatson

Je voudrais écrire un convertisseur et séparer toutes ces données une fois .

Il n’existe aucun moyen de créer une requête très rapide contre des données sérialisées.

1
fuxia