Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: problema con distinct

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250

    problema con distinct

    ciao a tutti
    ho un serio problema con una query, e non capisco il motivo

    devo estrapolare solamente il campo CATEGORIA in una tabella NOTIZIE per poi ordinare le notizie in gruppi di categorie in ordine di data inserimento.

    Ho provato a fare un distinct
    $s="SELECT DISTINCT categoria FROM $table WHERE padre='4' AND attiva='si' ORDER BY data_ins DESC LIMIT 0,5";

    NON funziona! mi esce un'altra categoria..
    mentre se faccio
    $s="SELECT categoria FROM notizie WHERE padre='4' AND attiva='si' ORDER BY data_ins DESC LIMIT 0,1";
    mi risulta corretto il risultato.

    Non posso utilizzare la seconda query perchè ho bisogno dell'elenco delle ultime 5 categorie aggiornate e come vedete, la seconda query mi estrapola gli articoli misti.
    Come faccio? Qualcuno ha un'idea perchè non funziona il distinct??

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    bè sarei messo male se non lo fosse...

    si la query e la table è giusta, l'ho provato direttamente anche su phpmyadmin

  4. #4
    Secondo me stai facendo un pò di confusione...

    (tanto rumore per nulla, come diceva il film.. )

    Dalle query stai estraendo le categorie... ma il where lo fai su altri campi, su che base dici che ti esce un'altra categoria, se quello che stai estraendo, sono proprio LE CATEGORIE

    Nella prima query, ti ritornano 5 valori, mentre nella seconda, uno solo... Non vorrei che vai a leggerti solo l'ultimo valore e ti perdi per strada... ho fatto la stessa identica queri sul mio db, e gira che è una meraviglia...

    Per questo credo che stai facendo la query in maniera errata...

    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  5. #5
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    hai provato con un GROUP BY ?
    ...altri 5 anni di purga...

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    Allora, forse non ci siamo capiti
    ho una tabella ARTICOLI così composta

    ID | CATEGORIA | PADRE | TITOLO | DESCRIZIONE | ATTIVA | DATA_INS

    nel sito devo creare 5 BOX che rappresentano 5 categorie.
    I box devono essere ordinati x le ultime notizie inserite, ciò vuol dire che se inserisco ora una notizia su ATTUALITA' per esempio, il primo box sarà la categoria ATTUALITA'.
    COME FACCIO A TROVARE NELLA TABELLA ARTICOLI LE CATEGORIE + AGGIORNATE?

    ho pensato ad un select distinct:
    $s="SELECT DISTINCT categoria FROM $table WHERE padre='4' AND attiva='si' ORDER BY data_ins DESC LIMIT 0,5";
    quindi nello specifico seleziono la categoria di tutti gli articoli attivi nella tabella con padre 4 (il padre è il canale del portale). Limito a 5 perchè mi servono le ultime 5 categorie.
    Così non va', perchè mi trovo come primo risultato una categoria che non è stata aggiornata x ultima.

    Spero di essere stato chiaro ora
    GROUP BY non l'ho mai usato..

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    Il campo CATEGORIA nella tabella ARTICOLI contiente l'ID della categoria.
    Tutte le categorie vengono gestite da una tabella CATEGORIA così composta:

    TABELLA CATEGORIA:
    ID | CATEGORIA

    TABELLA ARTICOLI:
    ID | CATEGORIA | PADRE | TITOLO | DESCRIZIONE | ATTIVA | DATA_INS

    Ho provato a usare anche un INNER JOIN:
    Codice PHP:
    $s="SELECT $table2.id, $table.categoria FROM $table2 INNER JOIN $table ON $table2.id=$table.categoria AND $table.padre='$padre' AND $table.attiva='si' ORDER BY $table.data_ins DESC LIMIT 10";
                
    $r=mysql_query($s);
                
    $d=mysql_fetch_array($r)){
                echo 
    "$d[categoria]
    "
    ;
                }

    IL RISULTATO:
    10
    11
    13
    10
    10
    11
    16
    20
    11
    10 
    mi trova le categorie con l'ordine giusto.. ma ho categorie doppie.. il risultato che voglio dovrebbe essere così:
    10
    11
    13
    16
    20
    STOP

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    Ho provato anche con GROUP BY

    Codice PHP:
    $s="SELECT * FROM $table WHERE padre='$padre' AND attiva='si' GROUP BY categoria ORDER BY data_ins DESC"
    Mi estrapola le categorie correttamente, ma ho sempre il solito problema dell'ordinamento.. le categorie raggruppate non sono ordinate x data di inserimento.

  9. #9
    Originariamente inviato da musghs
    Ho provato anche con GROUP BY

    Mi estrapola le categorie correttamente, ma ho sempre il solito problema dell'ordinamento.. le categorie raggruppate non sono ordinate x data di inserimento.
    distinct e group by rendono il primo record che trovano fisicamente nella tabella che soddisfa la richiesta, a prescindere da qualsiasi altra informazione passata nel where.

    Se fai una ricerca sul forum troverai diversi thread con diverse soluzioni sull'argomento.

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    Grazie piero!
    Ho guardato e ho visto che cè forse una soluzione al caso mio, già postata da te.
    http://forum.html.it/forum/showthrea...hreadid=995055

    Ho provato a modificarla con le mie condizioni, ma non riesco a capire come funziona.
    Ti posto la mia query con le condizioni richieste, secondo te dove sbaglio? con questa query mi estrapola tutte le categorie in ordine di inserimento, ma non me le raggruppa.


    Codice PHP:
    $s="SELECT * FROM (SELECT padre, attiva, max(categoria) as data1 FROM $table WHERE padre='$padre' AND attiva='si' GROUP BY categoria) as tab1 left join $table as tab2 ON tab1.data1=tab2.categoria ORDER BY tab2.data_ins DESC"
    Ho provato a mettere anche GROUP BY data1, ma mi da' errore.

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.