+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Chiarimenti su GROUP BY

  1. #1
    ensidia non  in linea Novello
    Luogo
    cochabamba bolivia
    Post
    18

    Chiarimenti su GROUP BY

    Ciao staff di masterdrive

    ho questo codice
    Codice PHP:
     <?
    if(($page==$page) && ($page=='Inicio')){
    $query "SELECT sottocategorie.*, schede.*, foto.* FROM sottocategorie, schede, foto WHERE sottocategorie.nome = '$page' AND schede.id_sottocategoria = sottocategorie.id AND foto.id_scheda = schede.id
                             GROUP BY foto.id_scheda DESC HAVING COUNT(*) > 1 limit 8"
    ;
    $risultato mysql_query ($query);
    $number mysql_num_rows($risultato);
    $i 0;
    if (
    $number 1) {
      print 
    "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
    }
    else{
      while (
    $row mysql_fetch_array ($risultatoMYSQL_ASSOC))

    echo
    "".$row['descrizione']."";
    ?>
     <div class="galeria">
      <? echo "<li><a href=\"admin/upload/".$row['nome_foto']."\" rel=\"lightbox[roadtrip]\"><img src=\"admin/upload/".$row['nome_foto']."\" style=\"width:110px; height:62px; border-radius: 4px 4px 4px 4px;\"/></a> </li>\r\n"?>
    </div>
    <?
    $i
    ++; 
    }
    }
    }
    ?>
    il problema che ho credo che sia in questa parte GROUP BY foto.id_scheda DESC HAVING COUNT(*) > 1 limit 8"; dove le dico di aggruppare dalla tabella foto i id_schede in teoria dovrebbe farmi vedere 8 foto ma mi estrae solo la prima foto gli altri 7 foto non vengono visualizzati, come posso estrare tutte le foto que hanno lostesso id_schede de la tabella foto??

    un saluto

  2. #2
    L'avatar di Brontolo
    Brontolo non  in linea Very Important Person
    Post
    2,822
    Spiega meglio cosa vorresti ottenere con quella query. E quel DESC ?
    Il regolamento del forum: la prima cosa da leggere.

  3. #3
    ensidia non  in linea Novello
    Luogo
    cochabamba bolivia
    Post
    18
    Ciao Brontolo

    grazie per la risposta!

    allora nella tabella sottocategorie ho le voci del menu, nella tabella schede memorizzo le pagine e nella tabella foto ho tutte le foto caricate riguardanti la la pagina. esempio carico una pagina home (scrivo il titolo la descrizione e carico foto) poi con questa query
    $query = "SELECT sottocategorie.*, schede.*, foto.* FROM sottocategorie, schede, foto WHERE sottocategorie.nome = '$page' AND schede.id_sottocategoria = sottocategorie.id AND foto.id_scheda = schede.id GROUP BY foto.id_scheda DESC HAVING COUNT(*) > 1 limit 8"; tiro fuori i dati (titolo descrizione e foto)

    mi tira fuori tutto pero mi fa vedere solo una foto non riesco a tirare le 8 foto que ho caricato ho provato a eliminare anche DESC HAVING COUNT(*) > 1 limit 8 pero uguale non viene le 8 foto solo 1.
    vorrei visualizzare le 8 foto.

    ho fatto questo altro script pero ho dovuto aggiungere una seconda query
    Codice PHP:
    $query2 "SELECT * FROM foto WHERE id_scheda = ".$row['id_scheda']." "
    pero io vorrei risolvere la cosa solo con una query, sicuramente
    c una soluzione per questa query
    Codice PHP:
     $query "SELECT sottocategorie.*, schede.*, foto.* FROM sottocategorie INNER JOIN schede INNER JOIN foto ON sottocategorie.nome = '$page' AND schede.id_sottocategoria = sottocategorie.id AND foto.id_scheda = schede.id GROUP BY foto.id_scheda DESC HAVING COUNT(*) > 1 limit 8"
    questo il secondo codice que funziona bene.
    Codice PHP:
    if(($page==$page) && ($page=='Inicio')){
                             
    $query = "SELECT sottocategorie.*, schede.*, foto.* FROM sottocategorie INNER JOIN schede INNER JOIN foto ON sottocategorie.nome = '$page' AND schede.id_sottocategoria = sottocategorie.id AND foto.id_scheda = schede.id GROUP BY foto.id_scheda DESC HAVING COUNT(*) > 1 limit 8";                     
                                 
    $risultato = mysql_query ($query);
    $number = mysql_num_rows($risultato);
    $i = 0;
    if ($number < 1) {
      print "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
    }
    else{
      while ($row = mysql_fetch_array ($risultato, MYSQL_ASSOC))

    echo"".$row['descrizione']."";
    ?>
    <?
    $i
    ++; 

    //foto
    $query2 "SELECT * FROM foto WHERE id_scheda = ".$row['id_scheda']." ";    
    $risultato2 mysql_query ($query2);
    $number2 mysql_num_rows($risultato2);
    $i2 0;
    if (
    $number2 1) {
      print 
    "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
    }
    else{
      while (
    $row2 mysql_fetch_array ($risultato2MYSQL_ASSOC))

    ?>
     <div class="galeria">
     
      <? echo "<li><a href=\"admin/upload/".$row2['nome_foto']."\" rel=\"lightbox[roadtrip]\"><img src=\"admin/upload/".$row2['nome_foto']."\" style=\"width:110px; height:62px; border-radius: 4px 4px 4px 4px;\"/></a> </li>\r\n"?>
    </div>
    <?
    $i2
    ++; 
    }}

    }}

    }

  4. #4
    L'avatar di Brontolo
    Brontolo non  in linea Very Important Person
    Post
    2,822
    Non conosco tutte le varianti esistenti di SQL, ma non credo che la sintassi GROUP BY ... DESC sia corretta. L'opzione DESC si applica semmai a ORDER BY.
    Comunque, per chiarire lo scenario, specifica la struttura delle tabelle elencando i campi coinvolti e le relazioni.
    Il regolamento del forum: la prima cosa da leggere.

  5. #5
    L'avatar di gibra
    gibra non  in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,052
    Scusa, ma questa istruzione mi pare un po' 'bislacca':

    codice:
    GROUP BY foto.id_scheda DESC HAVING COUNT(*) > 1 limit 8
    dove hai letto/appreso di usare DESC e LIMIT in un GROUP BY ?


    MySQL :: MySQL 5.6 Reference Manual :: 12.19.3 MySQL Handling of GROUP BY
    https://dev.mysql.com/doc/refman/5.6...-handling.html

    MySQL :: MySQL 5.6 Reference Manual :: 8.2.1.19 Optimizing LIMIT Queries
    https://dev.mysql.com/doc/refman/5.6...imization.html

  6. #6
    ensidia non  in linea Novello
    Luogo
    cochabamba bolivia
    Post
    18
    Ho 3 tabelle pero i piu importanti sono solo 2 schede e foto.

    Sotttocategorie
    ID nome
    1 home
    2 contatti
    3 servizi

    schede
    ID id_sottocategoria titolo descrizione
    1 1 titolo 01 descrizione 01
    2 2 titolo 02 descrizione 01

    foto
    id nome id_scheda
    1 01.jpg 1
    2 02.jpg 1
    3 03.jpg 1
    4 04.jpg 2
    5 05.jpg 2
    creo una scheda con (titolo descrizione e foto) dove tittolo e descrizione lo memorizzo nella tabella schede poi le foto della scheda nella tabella foto (fino a 10 foto)

    quello que voglio questo prendo dalla tabella sottocategorie il id 1 home poi prendo dalla tabella schede il id 1 a questo punto vorrei prendere le foto che corrispondono a la scheda con id 1 tutte le foto della tabella foto che hanno id_scheda 1 in questo caso dovrebbe prendere 3 foto.

    questo cosa que ho fatto funziona bene solo que non mi prende le tutte le foto dalla tabella foto solo mi fa vedere il primo. non so se si pu fare quello que voglio io o se devo per forza fare una query aparte per le foto dentro la query.

    Codice PHP:
    <?
    if(($page==$page) && ($page=='Inicio')){
    $query "SELECT sottocategorie.*, schede.*, foto.*  FROM sottocategorie INNER JOIN schede INNER JOIN foto ON sottocategorie.nome = '$page' AND schede.id_sottocategoria = sottocategorie.id AND foto.id_scheda = schede.id GROUP BY foto.id_scheda";    

    $risultato mysql_query ($query);
    $number mysql_num_rows($risultato);
    $i 0;
    if (
    $number 1) {
      print 
    "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
    }
    else{
      while (
    $row mysql_fetch_array ($risultatoMYSQL_ASSOC))

    echo
    "".$row['titolo']."";
    echo
    "".$row['descrizione']."";
    ?>
     <div class="galeria">
      <? echo "<li><a href=\"admin/upload/".$row['nome_foto']."\" rel=\"lightbox[roadtrip]\"><img src=\"admin/upload/".$row['nome_foto']."\" style=\"width:110px; height:62px; border-radius: 4px 4px 4px 4px;\"/></a> </li>\r\n"?>
    </div>
    <?
    $i
    ++; 
    }
    }
    }
    ?>

  7. #7
    L'avatar di Max.Riservo
    Max.Riservo non  in linea Scribacchino
    Post
    594
    quello que voglio questo prendo dalla tabella sottocategorie il id 1 home poi prendo dalla tabella schede il id 1 a questo punto vorrei prendere le foto che corrispondono a la scheda con id 1 tutte le foto della tabella foto che hanno id_scheda 1 in questo caso dovrebbe prendere 3 foto.
    Quindi NON ti serve la clausola Group BY ....
    Al massimo devi utilizzare la clausola WHERE per limitare il recordset ai soli record(s) dell' Id Sottocategorie (?)

  8. #8
    ensidia non  in linea Novello
    Luogo
    cochabamba bolivia
    Post
    18
    ciao max
    Codice PHP:
    $query "SELECT sottocategorie.*, schede.*, foto.*  FROM sottocategorie INNER JOIN schede INNER JOIN foto ON sottocategorie.nome = '$page' AND schede.id_sottocategoria = sottocategorie.id  WHERE foto.id_scheda=schede.id "
    facendo cosi mi tira fuori le tutte le foto 8 foto pero mi ripete il titolo e la descrizione per 8 volte.
    invece facendo mi tira fuori bene solo una volta il titolo e la descrione pero mi tira fuori solo una foto. quello que voglio tirare fuori un solo titolo e descrizione e le sue foto.
    Codice PHP:
    $query "SELECT sottocategorie.*, schede.*, foto.*  FROM sottocategorie INNER JOIN schede INNER JOIN foto ON sottocategorie.nome = '$page' AND schede.id_sottocategoria = sottocategorie.id  WHERE foto.id_scheda=schede.id  GROUP BY foto.id_scheda"

  9. #9
    L'avatar di gibra
    gibra non  in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,052
    Quote Originariamente inviato da ensidia Visualizza il messaggio
    ciao max
    Codice PHP:
    $query "SELECT sottocategorie.*, schede.*, foto.*  FROM sottocategorie INNER JOIN schede INNER JOIN foto ON sottocategorie.nome = '$page' AND schede.id_sottocategoria = sottocategorie.id  WHERE foto.id_scheda=schede.id "
    facendo cosi mi tira fuori le tutte le foto 8 foto pero mi ripete il titolo e la descrizione per 8 volte.
    Ovvio che sia cos. Non pu essere diversamente. Da che mondo mondo cos che funziona.

    Ma, francamente, non capisco dove sia il problema...

  10. #10
    L'avatar di Brontolo
    Brontolo non  in linea Very Important Person
    Post
    2,822
    Quote Originariamente inviato da ensidia Visualizza il messaggio
    facendo cosi mi tira fuori le tutte le foto 8 foto pero mi ripete il titolo e la descrizione per 8 volte.
    Il risultato di una query sempre un insieme di record ognuno dei quali composto dallo stesso insieme di campi. Se vuoi estrarre tutte (max 8) le foto otterrai quindi tanti record quante sono le foto e inevitabilmente in tutti questi record sar presente anche titolo e descrizione. Tuttavia questo non detto che sia un problema, dipende dall'uso che intendi farne.
    Il regolamento del forum: la prima cosa da leggere.

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi