Visualizzazione risultati 1 fino 13 di 13

Discussione: [PHP] Classifica conteggio query

  1. #1
    Guest

    Predefinito [PHP] Classifica conteggio query

    Codice PHP:
    <?PHP
    $strsql
    = "SELECT COUNT(ARTISTA) AS TOTALE_COL FROM RADIO WHERE ARTISTA LIKE 'System of a down'";
    $querysql = mysql_query($strsql,$connessione) or die(mysql_error());
    $row = mysql_fetch_array($querysql); {
    $TOTALE_SYSTEM = $row["TOTALE_COL"]; }

    ?>
    Con una query come questa qua sopra, "conteggio" il numero di volte che "System of a down" è stata inserita come artista, ma se volessi "trasformarla" in una classifica che faccia il conto di tutti i risultati di "artista" ed inserisca di fianco il numero di conteggio ordinato per asc?
    Ultima modifica di radioscud : 02-09-2006 alle ore 23.00.14

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Puoi far fare tutto a MySQL con questa query:

    SELECT Artista, COUNT(Artista) AS Punteggio
    FROM RADIO
    GROUP BY Artista
    ORDER BY Punteggio ASC

    Poi estrai una alla volta le righe della tabella e le visualizzi in ordine crescente.

    Stammi bene...

    P.S. Così ho risposto alla tua domanda, ma non avrebbe più senso un ordinamento DESC per fare una classifica?
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Puoi far fare tutto a MySQL con questa query:

    SELECT Artista, COUNT(Artista) AS Punteggio
    FROM RADIO
    GROUP BY Artista
    ORDER BY Punteggio ASC

    Poi estrai una alla volta le righe della tabella e le visualizzi in ordine crescente.

    Stammi bene...

    P.S. Così ho risposto alla tua domanda, ma non avrebbe più senso un ordinamento DESC per fare una classifica?
    Si, hai ragione, è meglio DESC :P


    EDIT: Però cosi le ordina per punteggio, ma non mi dice il punteggio. No?


    EDIT2: Risolto cosi:

    Codice PHP:
    $sqlonline = "SELECT ARTISTA, CANZONE, COUNT(CANZONE) AS Punteggio FROM RADIO GROUP BY ARTISTA ORDER BY Punteggio DESC";
    $conteggio = mysql_query($sqlonline,$connessione) or die(mysql_error());
    Poi sotto la fine del while:

    Codice PHP:

    <?PHP
    $query
    = "SELECT * FROM RADIO GROUP BY ARTISTA LIKE '<?=$ON_ARTISTA?>' AND CANZONE LIKE '<?=$ON_CANZONE?>'";
    $result = mysql_query($query, $connessione) or die(mysql_error());
    $ON_Punteggio = mysql_num_rows($result);
    ?>

    Poi, ovviamente, richiamo il punteggio accanto alla canzone con <?$=ON_Punteggio?> grazie


    EDIT 3: Come non detto, non mi conta realmente il numero di volte ç___ç mi da come risultato 1, anche se son già 2. Qualcuno sa dirmi dov'è l'errore?
    Ultima modifica di funcool : 03-09-2006 alle ore 14.49.14

  4. #4
    Guest

    Predefinito

    Ma su che base assegni il punteggio? Cosa devi contare?
    Magari fai un esempio della struttura della tabella e di un record di esempio.


    Ciao!

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    Ma su che base assegni il punteggio? Cosa devi contare?
    Magari fai un esempio della struttura della tabella e di un record di esempio.


    Ciao!
    Dunque, la tabella è solo RADIO con interne le righe ARTISTA, CANZONE, ID, ORA... che si basa praticamente sui dati delle canzoni che sono state mandate in onda. Quindi ogni volta che va in onda per dire Toxicity dei SOAD viene inviato un dato.

    Io voglio, per dire, contare qualche righe ci sono che corrispondono tutte ad ARTISTA = SOAD & CANZONE= Toxicity, ed in pratica mi da il numero di volte che la canzone è stata trasmessa.

    Capito ?

    Praticamente devo contare il numero di righe che hanno lo stesso campo e mi deve uscire fuori una "classifica" automatica, dove in cima c'è la più trasmessa e via via a scendere...

  6. #6
    Guest

    Predefinito

    Quindi se ho capito bene nella tabella potrebbe esserci questo:

    1- Quartetto Cetra - Vecchia fattoria
    2- Vasco - Albachiara
    3- Quartetto Cetra - Vecchia fattoria

    e la query dovrebbe restituirti:

    Quartetto Cetra -> 2
    Vasco -> 1

    Prova con:
    Codice PHP:
    SELECT ARTISTA, CANZONE, COUNT(CANZONE) AS Punteggio FROM RADIO ORDER BY Punteggio DESC
    Cosa restituisce?


    Ciao!!!!

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    Quindi se ho capito bene nella tabella potrebbe esserci questo:

    1- Quartetto Cetra - Vecchia fattoria
    2- Vasco - Albachiara
    3- Quartetto Cetra - Vecchia fattoria

    e la query dovrebbe restituirti:

    Quartetto Cetra -> 2
    Vasco -> 1

    Prova con:
    Codice PHP:
    SELECT ARTISTA, CANZONE, COUNT(CANZONE) AS Punteggio FROM RADIO ORDER BY Punteggio DESC
    Cosa restituisce?


    Ciao!!!!
    Un errore
    Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause


    Ma guardando bene tu stai ripronendo la stessa che abbiam provato prima e teoricamente le "dispone" per numero, ma NON visualizza il valore di punteggio. Dice solo che Quartetto Cetra è prima, Vasco secondo...

  8. #8
    Guest

    Predefinito

    Cazz, hai ragione, non l'avevo letta (o meglio, avevo letto altra cosa!).

    Dici che l'errore a questo punto è solo che non stampa Punteggio, giusto?
    La domanda sciocca è: come stampi il risultati di questa query? Sei sicuro che usi mysql_fetch_array (oppure _assoc o _row) per ciclare il risultato?


    Ciaoo!!

  9. #9
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Ma non ti converrebbe, sia per avere una query di lettura più semplice e un database più leggero, aggiornare la tabella contenente le canzoni suonate aggiungendo un +1 invece che aggiungere una nuova riga?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    Cazz, hai ragione, non l'avevo letta (o meglio, avevo letto altra cosa!).

    Dici che l'errore a questo punto è solo che non stampa Punteggio, giusto?
    La domanda sciocca è: come stampi il risultati di questa query? Sei sicuro che usi mysql_fetch_array (oppure _assoc o _row) per ciclare il risultato?


    Ciaoo!!
    while($ROW3 = mysql_fetch_array($conteggio))
    :D


    Funcool, teoricamente si, ma vengono anche visualizzate le canzoni mandate in onda di recente, che sono ordinate per ID, quindi se andasse un +1 all' id !, continuerebbe a "stare sotto" ad un ID 2 anche se la 1 è stata trasmessa dopo :)

  11. #11
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Potresti aggiungere un campo dove metti il timestamp dell'ultima volta che è stata mandata in onda la canzone.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  12. #12
    Guest

    Predefinito

    Citazione Originalmente inviato da radioscud
    while($ROW3 = mysql_fetch_array($conteggio))
    :D
    E dentro quel ciclo, stampando $ROW3['Punteggio'], cosa esce?


    Ciaooo!!

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    E dentro quel ciclo, stampando $ROW3['Punteggio'], cosa esce?


    Ciaooo!!
    Ok, ora va :) evidentemente avevo sbagliato a scrivere prima nel ciclo




    EDIT: Ovviamente, grazie a tutti :D
    Ultima modifica di radioscud : 03-09-2006 alle ore 15.42.38

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •