Pagina 3 di 5 primaprima 1 2 3 4 5 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 43

Discussione: MYSQL: cerca valore più frequente ma con difficoltà in più...

  1. #21
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    732
    allora ci siamo quasi ma mi sono tanto x cambiare perso, ecco il finale del mio codice:

    Codice PHP:
    $query = " SELECT id,
        SUBSTRING_INDEX(SUBSTRING_INDEX(html_sbagliatepp, ',', n.position+1), ' ', -1) as html_sbagliatepp_PART
    FROM
      miatabella
      INNER JOIN
      ($subquery # la subquery preparata prima
        ) n
      ON LENGTH(REPLACE(html_sbagliatepp, ',' , '')) <= LENGTH(html_sbagliatepp)-n.position
    order by id, html_sbagliatepp_PART";
    $records_media = mysql_query($query);
    $num_records = mysql_num_rows($records_media);
    while ( $media = mysql_fetch_array($records_media))
    {
    ?>
    <?print $media[html_sbagliatepp_PART]?>
    <?
    }
    ?>
    così mi "printa" una valangata di ID delle risposte errate, ho controllato ci sono tanti doppioni e triploni quindi non ha fatto una selezione, sembra che li elenchi tutti.....

  2. #22
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,155
    data la query e visto che funziona, ora devi modificarla per contare le occorrenze di ogni html_sbagliate_PART (quindi un COUNT(*), un GROUP BY html_sbagliate_PART) e ordinarle (direi per conteggio), decidendo se limitare l'output a un certo numero di record (LIMIT)

    valuta anche se ti serve il campo id in output, secondo me no

    PS: ottimo lavoro theseo

  3. #23
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    732
    macchè ottimo :-)
    ho errore nella query e non riesco a risolverlo...

    Codice PHP:
    $query " SELECT id,
        SUBSTRING_INDEX(SUBSTRING_INDEX(html_sbagliatepp, ',', n.position+1), ' ', -1) as html_sbagliatepp_PART
    FROM questionario_arch
      INNER JOIN
      (
    $subquery # la subquery preparata prima
        ) n
      ON LENGTH(REPLACE(html_sbagliatepp, ',' , '')) <= LENGTH(html_sbagliatepp)-n.position
    order by id, html_sbagliatepp_PART 
    GROUP BY html_sbagliatepp_PART
    LIMIT 30"
    ;

    $risultato mysql_query($query);
    if (!
    $risultato) {
       die(
    'Errore nella query: ' mysql_error());


  4. #24
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,155
    codice:
    " SELECT id,
        SUBSTRING_INDEX(SUBSTRING_INDEX(html_sbagliatepp, ',', n.position+1), ' ', -1) as html_sbagliatepp_PART,
        COUNT(*) as conteggio # aggiunto
    FROM questionario_arch
      INNER JOIN
      ($subquery # la subquery preparata prima
        ) n
      ON LENGTH(REPLACE(html_sbagliatepp, ',' , '')) <= LENGTH(html_sbagliatepp)-n.position
    GROUP BY html_sbagliatepp_PART # spostato una riga sopra
    order by conteggio DESC # ho messo il conteggio come ordinamento decrescente
    LIMIT 30";
    prova così

  5. #25
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    732
    ok no dà più errore!!!!! ma stampa questo elenco-->

    6862700968136813,68166813,6816,68176813,6816,6817, 68186813,6816,6817,6818,68196813,6816,6817,6818,68 19,68205888716971686862,68677168,716949567009,7017 7009,7017,55377199339667006700,67046700,6704,7168, 7169,71703396,339733976862,686371706862,687014

    è strano no? i miei numeri sono al massimo di 4 cifre e come mai il primo blocco 6862700968136813 sono 4 numeri da 4 cifre uniti?

  6. #26
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,155
    ho fatto il test sulle prestazioni, in totale impiega una ventina di secondi a completare tutte le query
    ovviamente il 99% del tempo è di quella con il substring_index e il conteggio

    record usati = 202000
    valori per campo = min 1, max 30 (tutti integer separati da spazio)

    se è da usare una volta ogni tanto ed esportare il dato, si può anche tenere così
    la cosa migliore da fare è cambiare la struttura e avere una riga per risposta errata

  7. #27
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,155
    usa print_r, così vedi il contenuto dell'array
    come stai facendo tu, devi posporre un'andata a capo dopo ogni print (echo "\n"; se sei su terminale o echo "<br />"; su web)

    Codice PHP:
    while ( $media = mysql_fetch_array($records_media))
    {
    ?>
    <?print_r($media?>
    <?
    }
    ?>

  8. #28
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jul 2002
    residenza
    Lyon
    Messaggi
    5,341
    Bisognerebbe fare un confronto di prestazioni con la soluzione 100% php descritta nel mio primo messaggio.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #29
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,155
    ^^^
    risultato schiacciante per te
    total time query substring_index: 19.364484071732
    total badaze: 0.53580117225647

  10. #30
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    732
    ok x il print adesso lo sistemo ma c'è qualcosa che non va nella select
    guardate i numeri che mi ha stampato prima, ad esempio il 6817 c'è varie volte invece ogni numero dovrebbe non ripetersi perchè dovrebbe essere l'ordine in cui sono disposti che spiega quante volte sono presenti...

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