it-swarm.dev

Come ordinare i risultati della mia query in base al valore publishing_up?

Ho uno script .php che recupera i campi dalla mia tabella del database e poi li visualizza in un ciclo foreach (qui ci sono le parti rilevanti del codice):

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

Quindi tutto funziona alla grande, tranne che le voci della mia matrice sono ordinate per id. Vorrei che fossero ordinati per data (dal publish_up valore).

Ho provato questo codice, ma sta visualizzando una pagina vuota con solo il titolo in alto:

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

Ho "imparato" il php solo guardando i codici e leggendo i tutorial, quindi mi manca molta conoscenza di base che è essenziale quando devo mettere in pratica la teoria.

Sono confuso sulla differenza tra un array e un object e non riesco a capire cosa dovrei fare per risolvere questo avviso.


MODIFICARE:

<?php
    var_dump($jfeed1)
?>

mi dà il primo oggetto:

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

Probabilmente ci sono altre differenze (o forse no: https://stackoverflow.com/questions/2193049/php-objects-vs-arrays ) tra oggetti e array, ma è principalmente una differenza di stile ( almeno quando si utilizza un oggetto stdClass).

Per gli oggetti, usi la sintassi di $variable->property E per le matrici usi $variable['property']. var_dump Di solito mostrerà una sintassi in stile array, anche se non è quello che vuoi usare se vedi stdClass, nel senso che è un oggetto.

Quindi la tua funzione date_compare Dovrebbe usare $a->publish_up E $b->publish_up Nelle chiamate strtotime. Ciò dovrebbe indurlo a utilizzare effettivamente i valori e quindi effettivamente a ordinare.


Puoi anche saltare tutto il bit di ordinamento in PHP semplicemente ordinando nell'istruzione 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();

(Non sono sicuro esattamente quale ordine desideri, quindi se è indietro, modifica DESC alla fine in ASC (decrescente v. Crescente ...)


E infine, la sezione obbligatoria "altre migliori pratiche di Joomla che dovresti usare". (Ovviamente il tuo codice può funzionare senza questi, ma sfruttano alcune delle caratteristiche più belle di Joomla.)

Il più grande è evitare di inserire il prefisso della tabella nella query. Fai sempre riferimento a una tabella iniziando con #__. Se condividi mai il codice tra due siti, è probabile che tu cambi il prefisso e sarà l'unica cosa che deve cambiare nel codice per farlo funzionare nel nuovo sito, quindi risparmia guai e digita sempre #__.

In secondo luogo, l'oggetto query di Joomla è un ottimo modo per creare query e farlo funzionare automaticamente per altri tipi di database (anche se non li usi mai ora) e ha anche la possibilità di sfuggire a te. Sicuramente vale la pena conoscere! http://docs.joomla.org/Selecting_data_using_JDatabase

4
David Fritsch

È possibile utilizzare la seguente query:

$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