[PHP] Priorità annunci nel listato

Discussione in 'PHP' iniziata da Achille610@, 17 Gennaio 2018.

  1. Achille610@

    Achille610@ Utente Attivo

    Registrato:
    18 Aprile 2017
    Messaggi:
    75
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Ciao a tutti,
    ho un piccolo problema che però non riesco a capire come e dove mettere le mani:

    Ho una query che mi restituisce i risultati del db correttamente, ora però ho l necessità di avere insieme dei risultati con priorità.

    Ho creato nel db un campo enum con numero di default 0 e poi 1,2,3 io vorrei in poche parole che se nello stesso listato ci siano degli annunci in categoria 1,2,3 si vedano nel listato con priorità su quello che è a 0, nell'ordine 0, 1. 2, 3 se non è fattibile mi basterebbe anche solo 0, 1

    vi posto sotto la query con qui recupero i risultati cosi magari qualcuno di voi esperti può darmi una mano.

    PHP:

    <?php 
    //includiamo il file della classe 
    @require("paginazione.php"); 

    //connettiamoci a MySQL e selezioniamo il database 
    class MySQL 
    {  
    function 
    MySQL()  
    {  
    require 
    "db_connect.php";
    }  
    }  

    $data = new MySQL(); 

    // istanziamo la classe per l'impaginazione 
    $p = new Paging
    $max 6
    $inizio $p->paginaIniziale($max); 
    $query_count = @mysql_query(
    "SELECT * FROM
         pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
         INNER JOIN provincia ON (pompe.provinciaid=provincia.id )
         INNER JOIN categoria ON (pompe.categoriaid=categoria.id )
         INNER JOIN users ON (pompe.user_id=users.id)
           
    WHERE
     tipologia.tipologia='pluto' AND categoria.categoria='topolino'  AND provincia.provincia='Forli-Cesena' ORDER BY `id_annunci` DESC "
    )
       
         or die (
    mysql_error()); 
    $count = @mysql_num_rows($query_count) or die (mysql_error()); 

    $pagine $p->contaPagine($count$max); 

    $obj_titolo = @mysql_query(
    "SELECT * FROM
         pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
         INNER JOIN provincia ON (pompe.provinciaid=provincia.id )
         INNER JOIN categoria ON (pompe.categoriaid=categoria.id )
         INNER JOIN users ON (pompe.user_id=users.id)
           
    WHERE
     tipologia.tipologia='pluto' AND categoria.categoria='topolino' AND provincia.provincia='Forli-Cesena' ORDER BY `id_annunci` DESC LIMIT "
    .$inizio.",".$max) or die (mysql_error());

    while (
    $row mysql_fetch_array($obj_titolo)) {  

    $click_annuncio $row['click_annuncio']; 
    $id_annunci $row['id_annunci']; 
    $user_id $row['id']; 
      
    $messaggio substr($row['messaggio'], 0200);  
      
    $mq $row['mq'];  
      
    $tipologia $row['tipologia']; 
      
    $categoria $row['categoria'];
      
    $provincia $row['provincia'];
      
    $titolo $row['titolo']; 
         
    $tipo $row['tipo']; 
       
    $locali $row['locali']; 
      
    $username $row['username']; 
      
    $email $row['email']; 
        
    $cliente $row['cliente']; 
           
    $logo_cliente $row['logo_cliente']; 
           
    $titolo_link preg_replace('<br>'''$titolo);
        
    $titolo_link preg_replace('/[^a-z ]+/i'''$titolo_link); 
       
    $titolo_link preg_replace('/\s+/''-'$titolo_link);        
      
    $titolo_link strtolower ($titolo_link);  
      
    $provincia $row['provincia'];        
       
       
    $nome_file $row['nome_file']; 
      
    $tipo_file $row['tipo_file']; 
      
    $dati_file $row['dati_file']; 
       
      
    $nome_file_vero $row['nome_file_vero']; 
      
    $tipo_file $row['tipo_file']; 
      
    $dati_file $row['dati_file']; 
    //recuperiamo i dati da stampare 



    // stampo i dati

      
    echo "<a href=\"$titolo_link-$id_annunci\"/>$titolo</a><br /><br /> "
            echo 
    "  <p><a href=\"$titolo_link-$id_annunci\"/><img src='immagini2ricette.php?id_annunci=$id_annunci' name='$nome_file' alt'$nome_file' title='$titolo' class='img-responsive'  /></a></p>";
           
            echo 
    "<h5>$messaggio ...</h5><br />";
             echo 
    "<h5>$tipologia | $categoria | $cittas </h5><br /><br /> ";                



    $lista $p->listaPagine($_GET['p'], $pagine); 
    echo 
    $lista "<br>"

    $navigatore $p->precedenteSuccessiva($_GET['p'], $pagine); 
    echo 
    $navigatore
    ?>
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.548
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    non so se ho capito, in ogni caso penso sia sufficiente modificare
    Codice:
    ORDER BY enum DESC, id_annunci DESC
    mettendo la condizione DESC, verranno ordinati mettendo prima 3 in successione gli altri ed ultimo lo zero
     
  3. Achille610@

    Achille610@ Utente Attivo

    Registrato:
    18 Aprile 2017
    Messaggi:
    75
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Ciao @marino51 ,
    grazie mille per la risposta, se modifico da ORDER BY `id_annunci` DESC in ORDER BY enum DESC, id_annunci DESC, mi da il seguente errore:

    Unknown column 'enum' in 'order clause'

    se invece al posto di enum, metto il nome del campo: attivo mi da

    Column 'attivo' in order clause is ambiguous
     
  4. Achille610@

    Achille610@ Utente Attivo

    Registrato:
    18 Aprile 2017
    Messaggi:
    75
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Ciao,
    mancavano gli apici :)

    in ogni caso se anche metto gli apici con enum o con il nome del campo del db attivo non mi da errori, ma gli annunci rimangono sempre come da inserimento, e non come da ordine del campo attivo (enum 0,1,2,3)
     
  5. Achille610@

    Achille610@ Utente Attivo

    Registrato:
    18 Aprile 2017
    Messaggi:
    75
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Ciao,
    nessuno riesce ad aiutarmi ???

    ho provato anche a cambiare i campi del campo Attivo (enum) con lettere e non con numeri, ma il risultato è sempre il medesimo, anzi a differenza del suggerimento di @marino51 in questo caso mi prende l'ordine del DESC corretto, riordinandomeli dal più nuova al più vecchio, ma in ogni caso le priorità non me le prende :(

    ho provato anche con FIELD ma niente sto impazzendo :(

    PHP:
    SELECT FROM pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id INNER JOIN
     provincia ON 
    (pompe.provinciaid=provincia.id INNER JOIN categoria
    ON
    (pompe.categoriaid=categoria.id INNER JOIN users ON (pompe.user_id=users.id)
     
    WHERE tipologia.tipologia='Toilette' AND categoria.categoria='cani'  ANDprovincia.provincia='Milano' 
    ORDER BY 'attivo'='normale' DESC'attivo'='top' DESC'attivo'='supertop' DESC'attivo'='premium' DESCid_annunci DESC
     
  6. Achille610@

    Achille610@ Utente Attivo

    Registrato:
    18 Aprile 2017
    Messaggi:
    75
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Grazie lo stesso a tutti ho risolto da solo.

    Posto qui sotto la risoluzione cosi se qualcuno prima o poi avesse lo stesso problema, potrebbe risolvere cosi:

    Ho creato un nuovo tabella con 2 campi id autoincrement ecc.. e prioryty

    ho creato all'interno 4 risultati
    normale
    uno
    due
    tre

    Ho aggiunto alla tabella principale (quella dei risultati un campo priorytyid enum con valore predefinito (normale) = 1

    PHP:
    SELECT FROM
    pompe INNER JOIN tipologia ON 
    (pompe.tipologiaid=tipologia.id )
    INNER JOIN provincia ON (pompe.provinciaid=provincia.id )
    INNER JOIN categoria ON (pompe.categoriaid=categoria.id )
    INNER JOIN prioryty ON (pompe.priorytyid=prioryty.id )
    INNER JOIN users ON (pompe.user_id=users.id)
    WHERE tipologia.tipologia='pistacchi' AND categoria.categoria='arazzi' 
    AND provincia.provincia='palazzi' AND priorytyid 
    ORDER BY priorytyid DESC
    id_annunci DESC
    Cosi funziona correttamente, ho provato varie combinazioni e il risultato è perfetto

    Buona giornata a tutti
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.548
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    non ho potuto rispondere prima, ma io sto a quello che scrivi tu, il campo lo avevi creato .....
     
  8. Achille610@

    Achille610@ Utente Attivo

    Registrato:
    18 Aprile 2017
    Messaggi:
    75
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Ciao @marino51 si l'avevo creato, ma era un campo nella tabella principale e cosi non funzionava, allora ho creato una nuova tabella chiamata prioryty, che poi ho relazionato alla tabella principale con priorytyid sempre campo enum, poi ho aggiunto questi campi alla join e ora mettendo come avevi detto tu alla fine della query prioryty DESC, id_annunci DESC funziona

    se controlli infatti la prima query postata e la seconda vedi la modifica ...

    In ogni caso cosi funziona e nell'altro modo no, quindi se qualcuno dovesse aver bisogno della cosa ho commentato tutto il codice e sono comunque a disposizione di altri utenti, come altri utenti lo sono sempre stati per me :)
     
Sto caricando...

Condividi questa Pagina