Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Order by su query Mysql

    Buongiorno,
    sto testando una beta di alcuni moduli php contenenti dei richiami a delle query su delle tabelle mysql, la porzione del codice che vorrei modificare per fargli visualizzare ciò che desidero è questa:

    foreach ($catids as $cat) {
    $catid = $cat->category->id;
    // query to determine article count
    $query = 'SELECT a.*,u.name as creater,cc.description as catdesc, cc.title as cattitle,s.description as secdesc, s.title as sectitle,' .
    ' CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END as slug,'.
    ' CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug,'.
    ' CASE WHEN CHAR_LENGTH(s.alias) THEN CONCAT_WS(":", s.id, s.alias) ELSE s.id END as secslug'.
    ' FROM #__content AS a' .
    ' INNER JOIN #__categories AS cc ON cc.id = a.catid' .
    ' INNER JOIN #__sections AS s ON s.id = a.sectionid'.
    ' left JOIN #__users AS u ON a.created_by = u.id';
    $query .= ' WHERE a.state = 1 ' .
    ($noauth ? ' AND a.access <= ' .(int) $aid. ' AND cc.access <= ' .(int) $aid. ' AND s.access <= ' .(int) $aid : '').
    ' AND (a.publish_up = '.$db->Quote($nullDate).' OR a.publish_up <= '.$db->Quote($now).' ) ' .
    ' AND (a.publish_down = '.$db->Quote($nullDate).' OR a.publish_down >= '.$db->Quote($now).' )' .
    "\n AND cc.id=" . (int) $catid.
    ' AND cc.section = s.id' .
    ' AND cc.published = 1' .
    ' AND s.published = 1';
    if(!$showcontentfrontpage) {
    $query .= ' AND a.id not in (SELECT content_id FROM #__content_frontpage )';
    }

    $query .= ' ORDER BY a.created DESC' ;
    Ho segnato in grassetto le righe interessate:
    - INNER JOIN #__categories AS cc ON cc.id = a.catid praticamente credo che questa direttiva faccia una ricerca per categorie dove deve risultare appunto che cc.id = a.catid. Il codice va benissimo e visualizza appunto dei contenuti per categoria. Io desidererei però che i contenuti fossero ordinati secondo l'ordine elle categorie che contengono un parametro cc.ordering e non per semplice cc.catid progressivo.

    La seconda riga evidenziata in grassetto:
    - ORDER BY a.created DESC ordina i contenuti (per categoria) tramite il parametro a.created relativo alla tabella a dei contenuti, mentre io vorrei che ordinasse prima di tutto le categorie per cc.ordering poi i relativi contenuti per a.created.

    Mi sapete dire come intervenire, ve ne sarei grato perchè ho una presentazione del progetto proprio oggi..

  2. #2
    Nella funzione precedente c'è invece il richiamo a questa query che seleziona le categorie:

    $query = "SELECT id FROM #__categories WHERE published = 1 and section=".(int) $secid." order by ordering";
    ordering è un parametro sia della tabella categories che della tabella section ma alla fine le categorie non vengono visualizzate secondo il parametro ordering ma per semplice id progressivo

  3. #3
    $query .= ' ORDER BY cc.ordering, a.created DESC' ;

    dovrebbe servire allo scopo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Avevo già provato ma lo script in realtà conteneva diverse porzioni di codice/query in cui ricercava le categorie, ho provato con più calma ad applicare l'ORDER BY ordering alle diverse query sulle categorie e ho trovato quella che non ordinava nel modo corretto.. ora funziona correttamente.

    Grazie mille, buona giornata...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.