Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 35

Hybrid View

  1. #1

    GROUP BY non funziona più

    Ciao a tutti, ho una pagina di un mio sito che funziona perfettamente con PHP 5.4 ma smette di funzionare con PHP 5.6 ed il problema è nella clausola GROUP BY.
    La pagina è la seguente.
    codice:
    <?PHP
    
    $linguetta = "Gianluca Verna - Foto Rally";
        
    include ("header.php");
        
    
    
    echo "<div id=\"box-grande\">";
    
    
    
    
    include ("link_orizzontali.php");
    
    
    
    
    echo "<div id=\"colonna_sx\">";
    echo "<br><br><br>";
    include ("link_verticali_rally.php");
    echo "</div>";
    
    
    
    
    echo "<div id=\"colonna_dx\">";
    echo "<br><br><br>";
    
    
    require_once 'ycpager/anni.class.ycpager.php';
    
    
    
    
    //Connessione al database
    $mysqli = new mysqli("$dbhost", "$dbuser", "$dbpass");
    $mysqli->select_db("$dbname");
    
    
    //Ottengo il numero delle pagine totali.
    $total = mysqli_query ($mysqli,"SELECT * FROM fotografie_rally GROUP BY anno ORDER BY orientamento, anno DESC");
    $numero_anni = mysqli_num_rows ($total);
    
    
    
    
    
    
    
    
    if($numero_anni > 0) {
        $limite = 20;
        
        //Pagina attuale
        $p = !empty($_GET['p']) ? $_GET['p'] : 1;
        
        $redirect_to = "foto_rally.php";
        
        //Inizializzo YCPager
        $pager = new YCPager( $p, $numero_anni, $limite, $redirect_to );
        
        //Ottengo l'Offset da usare nella query successiva
        $offset = $pager->getQueryOffset();
    
    
    
    
    
    
    mysqli_close($mysqli);
    
    
    
    
    echo "<table style=\"width: 800px\" class=\"style9\" align=\"center\">";
        echo "<tr>";
        echo    "<td align=\"center\" style=\"height: 35px\">";
        echo        "<strong>";
                
                echo "LE FOTOGRAFIE DEI RALLY"; 
            
                
        echo        "</strong>";
        echo    "</td>";
        echo    "</tr>";
    echo    "</table>";
    
    
    echo    "<br>";
    
    
    
    
    
    
    
    
    
    
    
    
    echo "<Table Width=\"90%\" align=\"center\">";
    
    
    
    
    $mysqli = new mysqli("$dbhost", "$dbuser", "$dbpass");
    $mysqli->select_db("$dbname");
    
    
    
    
    
    
    $result = mysqli_query ($mysqli,"SELECT * FROM fotografie_rally GROUP BY anno ORDER BY orientamento ASC,anno DESC LIMIT $limite OFFSET $offset"); 
    $num = mysqli_num_rows ($result);
    
    
    $end=1;
    $i=1; // contatore
    
    
    while($row = mysqli_fetch_assoc($result)) {
       $file = $row['nome_file'];
       $anno = $row['anno']; 
       $title = $row['anno'];
       $subtitle = "ANNO $anno";
       if ($anno == 2004) {
       $title = "PRIMA DEL 2005";
       $subtitle = "PRIMA DEL 2005";
        }
            
    
    
    
    
            list($width, $height) = getimagesize("fotografie_rally/miniature/$file");
    
    
            if (($width) <= ($height))
            {
            $visualizza = "<Img Src=\"fotografie_rally/miniature/$file\" Height=$height Border=\"1\" alt=\"$title\" title=\"$title\">";
            }
            if (($height) <= ($width))
            {
            $visualizza = "<Img Src=\"fotografie_rally/miniature/$file\" Width=$width Border=\"1\" alt=\"$title\" title=\"$title\">";
            }
            
            if ($i==1) {
       echo "<tr>";
       }   //Apro una nuova riga
            
            echo "<Td>";        
            echo "<Table align=\"center\" Cellpadding=\"0\" Cellspacing=\"3\">";
            echo "<Tr>";
            echo "<Td Valign=bottom style=\"height: 120px\">";
            echo "<center><a href=\"dettaglio_foto_rally.php?anno=$anno\" class=\"border\">"; echo "$visualizza</a></center>";
            echo "</Td>";
            echo "</Tr>";
            echo "<Tr>";
            echo "<Td Valign=Top class=\"style_denominazione\">";
            echo "<center><a href=\"dettaglio_foto_rally.php?anno=$anno\" class=\"border\">"; echo "<b>$subtitle</b></a></center>";
            echo "</Td>";
            echo "</Tr>";
            echo "</Table>";
            echo "</Td>";
            
            
    if ($end == $num) break;
    
    
    else {
            
    if($i==4) { echo "</tr>";   $i=1; $end++;  }
       //ho finito di inserire gli elementi della riga e la chiudo 
       else {   $i++; $end++;  }
    }
       } //fine while
       
       
        echo "</Tr>";          
       
    
    
    
    
    
    
    
    
    echo "</Table>";
    
    
    echo "<br>";
    
    
    if($numero_anni > 20) {
        $limite = 20;
        
         //Stampo la paginazione
        $pager->getPager();
    }
    
    
    
    
    
    
    
    
    
    
    mysqli_close($mysqli);
    
    
    }
    
    
    else {
        
    echo "<br><br><br>
        <table Width=\"90%\" class=\"style9\" align=\"left\">
        <tr>
        <td>
        <p align=\"left\"><b>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NESSUNA FOTO IN ARCHIVIO</b></p>
        </td>
        </tr>
        </table>
        <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
            }    
    
    
    
    
    
    
    echo "</div>";
    
    
    
    
    
    
    
    
    echo "</div>";
    
    
    echo "<br><br>";
    
    
    
    
        
        include ("footer.php");
        ?>
        
        
        
    
    
    </body>
    
    
    </html>
    Il problema è che io devo estrarre una foto per ogni anno in modo da generare i link ai vari anni per richiamare tutte le foto di un anno scelto dall'utente.
    Con PHP 5.4 funziona perfettamente.

    La porzione di codice incriminata è la seguente.
    codice:
    //Connessione al database$mysqli = new mysqli("$dbhost", "$dbuser", "$dbpass");
    $mysqli->select_db("$dbname");
    
    
    //Ottengo il numero delle pagine totali.
    $total = mysqli_query ($mysqli,"SELECT * FROM fotografie_rally GROUP BY anno ORDER BY orientamento, anno DESC");
    $numero_anni = mysqli_num_rows ($total);
    Mi spiegate come ovviare al problema ?
    Grazie per l'aiuto.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,898
    Due domande:
    1) cosa vuol dire che con PHP 5.6 non funziona? Se non spieghi che succede non si capisce la situazione
    2) come passi da PHP 5.4 a PHP 5.6? Sei su 2 sistemi completamente diversi? In tal caso il problema potrebbe essere altrove.

  3. #3
    L'errore riscontrato è il seguente:

    ERRORE: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column'database.fotografie_rally.id' which is not functionally dependent on columns in GROUP BY clause; this is
    incompatible with sql_mode=only_full_group_by

    Il mio sito funziona su host tophost con php 5.4 ma non funziona su host tophost php 5.6

  4. #4
    E comunque il messaggio di errore contiene sia il motivo che la soluzione...

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    E comunque il messaggio di errore contiene sia il motivo che la soluzione...
    Hai ragione ma io non sono in grado di risolvere senza un aiuto.

  6. #6
    Puoi pls postare solo l’istruzione incriminata? Grassssie

  7. #7
    Quote Originariamente inviata da optime Visualizza il messaggio
    Puoi pls postare solo l’istruzione incriminata? Grassssie
    codice:
    //Ottengo il numero delle pagine totali.$total = mysqli_query ($mysqli,"SELECT * FROM fotografie_rally GROUP BY anno ORDER BY orientamento, anno DESC"); $numero_anni = mysqli_num_rows ($total);

  8. #8
    invece di SELECT * (comunque una bad practice) specifica le colonne da restituire

  9. #9
    Quote Originariamente inviata da optime Visualizza il messaggio
    invece di SELECT * (comunque una bad practice) specifica le colonne da restituire
    Anche se faccio SELECT anno anziché SELECT * non cambia nulla.

  10. #10
    cioè, se tu scrivi

    SELECT anno FROM fotografie_rally GROUP BY anno ORDER BY orientamento, anno DESC

    non funziona? che errore ti dà?

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 © 2020 vBulletin Solutions, Inc. All rights reserved.