it-swarm-es.tech

¿Cómo ordenar los resultados de mi consulta por valor de edit_up?

Tengo un script .php que recupera campos de la tabla de mi base de datos y luego los muestra en un bucle foreach (aquí están las partes relevantes del código):

<?php                   
$jquery1 = "SELECT `fulltext`,alias,metakey,publish_up,metadesc
            FROM kms_content
            WHERE catid=22 AND state= '1'";
$jdb1->setQuery( $jquery1 );
$jfeed1= $jdb1->loadObjectList();
foreach ($jfeed1 as $jitem1):
    ?>
    <li>
        <div>
            <?php                                 
            $oldLocale = setlocale(LC_TIME, 'en_US');
            echo strftime("%a %d %b %Y", strtotime($jitem1->publish_up)); 
            setlocale(LC_TIME, $oldLocale);
            ?>
        </div>
        <div><?php echo $jitem1->fulltext; ?></div>
    </li> 
    <?php
endforeach;
?>

Entonces, todo funciona muy bien, excepto que mis entradas de matriz están ordenadas por id. Me gustaría que se clasifiquen por la fecha (por el publish_up valor).

He intentado este código, pero muestra una página en blanco con solo el título en la parte superior:

$jfeed1 = $jdb1->loadObjectList();

function date_compare($a, $b)
{
    $t1 = strtotime($a['publish_up']);
    $t2 = strtotime($b['publish_up']);
    return $t1 - $t2;
}    
usort($jfeed1, 'date_compare');
foreach ($jfeed1 as $jitem1):

He "aprendido" php simplemente mirando códigos y leyendo tutoriales, por lo que me falta mucho conocimiento fundamental que es esencial cuando tengo que poner en práctica la teoría.

Estoy confundido acerca de la diferencia entre un array y un object y no puedo entender qué se supone que debo hacer para resolver esta advertencia.


EDITAR:

<?php
    var_dump($jfeed1)
?>

me da el primer artículo:

array(22) {
    [0]=> object(stdClass)#318 (5) { 
        ["fulltext"]=> string(212) "Yesterday ..." 
        ["alias"]=> string(3) "237" 
        ["metakey"]=> string(7) "France" 
        ["publish_up"]=> string(19) "2011-11-15 09:06:39"
    }
3
MagTun

Probablemente haya otras diferencias (o tal vez no: https://stackoverflow.com/questions/2193049/php-objects-vs-arrays ) entre objetos y matrices, pero es principalmente una diferencia de estilo ( al menos cuando se usa un objeto stdClass).

Para los objetos, usa la sintaxis de $variable->property y para las matrices utilizas $variable['property']. var_dump generalmente mostrará una sintaxis de estilo de matriz, aunque eso no es lo que desea usar si ve stdClass, lo que significa que es un objeto.

Entonces tus date_compare la función debe usar $a->publish_up y $b->publish_up dentro de las llamadas strtotime. Eso debería hacer que realmente use los valores y, por lo tanto, realmente se ordene.


También puede omitir todo el bit de clasificación en PHP simplemente ordenando en la instrucción SQL:

$jquery1 = "SELECT `fulltext`,alias,metakey,publish_up,metadesc FROM kms_content  WHERE catid=22 AND state= '1' ORDER BY publish_up DESC";
$jdb1->setQuery( $jquery1 );
$jfeed1= $jdb1->loadObjectList();

(No estoy seguro exactamente qué orden desea, por lo que si está al revés, cambie DESC al final a ASC (descendente v. Ascendente ...)


Y finalmente, la sección obligatoria "otras mejores prácticas de Joomla que debes usar". (Obviamente, su código puede funcionar sin estos, pero aprovechan algunas de las mejores características de Joomla).

La más importante es evitar poner el prefijo de la tabla en la consulta. Siempre haga referencia a una tabla comenzando con #__. Si alguna vez comparte código entre dos sitios, es probable que cambie el prefijo y eso será lo único que debe cambiar en el código para que funcione en el nuevo sitio, así que evite problemas y escriba siempre #__.

En segundo lugar, el objeto de consulta de Joomla es una excelente manera de crear consultas y hacer que funcione automáticamente para otros tipos de bases de datos (incluso si nunca las usa ahora) y también hace que se escape por usted. Definitivamente vale la pena aprender! http://docs.joomla.org/Selecting_data_using_JDatabase

4
David Fritsch

Puede usar la siguiente consulta:

$jquery1 = $jdb1->getQuery(true)
                ->select('`fulltext`, alias, metakey, publish_up, metadesc')
                ->from('#__content')
                ->where('`catid` = 22')
                ->where('`state` = 1')
                ->order('publish_up desc'); // OR ->order('publish_up asc');
3
Farahmand