Pagina 2 di 5 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 43

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

  1. #11
    Utente di HTML.it
    Registrato dal
    Jul 2014
    residenza
    Arezzo
    Messaggi
    22

  2. #12
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jul 2002
    residenza
    Lyon
    Messaggi
    5,341
    Quote Originariamente inviata da Rikk73 Visualizza il messaggio
    La mia prima prova è stata fatta proprio con SUBSTRING_INDEX. Ho abbandonato perché troppo macchinoso per rimpiazzare il primo elemento.
    Se si sapesse il numero massimo degli elementi e se questo numero non fosse grande si potrebbe fare con una sola query. L’ho già fatto in passato per isolare parti di dati con formato csv.
    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

  3. #13
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,153
    proverei con una combinazione tra php e mysql


    primo step, calcolare il numero massimo di elementi contenuto nel campo "COLONNA"


    codice:
    :
    -- in pratica conta i replace fatti sul separatore che usi nel campo
    SELECT 
        max(ROUND (   
            (
                LENGTH(COLONNA)
                - LENGTH( REPLACE (COLONNA, " ", "") ) 
            ) / LENGTH(" ")        
        ) + 1 )  
    FROM TABELLA

    secondo step, preparare una subquery da mettere in join con la TABELLA


    codice:
    <?php
    
    
    $value = 5; # il MAX della query precedente
    
    
    $subquery = "SELECT 0 position UNION ALL\n";
    
    
    for($i = 1; $i <= $value; $i++) {
        $subquery .= "SELECT $i ";
        if ($i != $value) {
            $subquery .= "UNION ALL\n";
        }
    }

    terzo step, preparare la query finale


    codice:
    $query = "
    SELECT 
        id,
        SUBSTRING_INDEX(SUBSTRING_INDEX(COLONNA, ' ', n.position+1), ' ', -1) as COLONNA_PART
    FROM
      TABELLA
      INNER JOIN
      ($subquery # la subquery preparata prima
        ) n
      ON LENGTH(REPLACE(COLONNA, ' ' , '')) <= LENGTH(COLONNA)-n.position
    order by id, COLONNA_PART
    "
    Ultima modifica di clasku; 03-11-2018 a 12:02

  4. #14
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    732
    cappero quindi senza tabelle di appoggio?
    mò provo e vi dico
    infinite grazie a tutti

  5. #15
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,153
    ah, dimenticavo... ho usato lo spazio per suddividere i campi della colonna, nel caso devi variare i primo parametro di LENGHT() ed il secondo di SUBSTRING_INDEX() e REPLACE()

  6. #16
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jul 2002
    residenza
    Lyon
    Messaggi
    5,341
    Bravissimo clasku !

    Pero' una domanda rimane. E' una query che viene eseguita poco spesso o puo' essere eseguita a qualunque momento da chiunque ?

    La strada migliore sarebbe di riempire una tabella con gli elementi ad ogni inserimento nella tabella "principale". Anche se ci sarebbero altre considerazioni da fare come agire in caso di modifica.
    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

  7. #17
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,153
    grazie badaze

    una normalizzazione del DB secondo me è necessaria
    immagino tre tabelle
    - evento (id_evento, descrizione, altri campi)
    - soggetto (id_soggetto, descrizione, altri campi)
    - partecipante (id_soggetto, id_evento)

    magari theseo ci dice se ha risolto, io mi riservo di riempire una tabella di dati e testare le prestazioni

  8. #18
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    732
    eccomi
    allora il DB ha UNA tabella con i campi classici: id, nome, cognome, classe (ah ne approfitto x dirvi che sono un insegnante NON di informatica autodidatta php... quindi dovete avere molta pazienza con me, questo script mi serve x il sito della mia scuola, è un db che raccoglie i dati di alcuni test fatti dagli allievi e dovrebbe restituire i risultati...). Uno dei campi raccoglie gli ID delle risposte errate da ogni allievo separate da virgola, ecco ad esempio dei record:

    ID NOME COGNOME SBAGLIATE
    1 paolo rossi 765,453,23,678,998
    2 luca bianchi 765,34,356,556,78,998
    3 marco ferri 765,45,234

    noi avremmo bisogno di capire quali sono le domande che + li hanno fatti sbagliare quindi nel caso dell'esempio sopra vorremmo avere una ECHO che si pubblicasse un elenco così-->

    1) 765 (perchè è presente 3 volte)
    2) 998 (perchè è presente 2 volte)
    3) le altre...

    chiarito ciò, ho provato con il codice di clasku ma mi restituisce
    Parse error: syntax error, unexpected ','
    nella riga 6

    Codice PHP:
    $query "SELECT 
        max(ROUND (   
            (
                LENGTH(COLONNA)
                - LENGTH( REPLACE (html_sbagliatepp, "
    ,", "") ) 
            ) / LENGTH(" ")        
        ) + 1 )  
    FROM questionario_arch"

    ho anche provato con il codice di badaze, ho fatto le tabelle di appoggio e mi viene il DONE finale ma non so come collegarlo al tutto

  9. #19
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,153
    Usa l’apice singolo per racchiudere la query invece del doppio, ti da errore perché i parametri sono racchiusi tra doppi apici. Cosa usi per programmare? In genere i software segnalano questi errorini, visualmente colorando in maniera non coerente la stringa

    ricorda, nelle stringhe
    se sono racchiuse tra doppi apici, eventuali altri doppi apici nella stringa devono essere escapati con un backslash (esempio “il mio nome è \”Mario\”. Un saluto”. In questo caso php fa il parsing di eventuali variabili (tipo $var) sostituendole con il loro valore
    se sono racchiuse tra apici singoli, devi escapare gli altri apici singoli m non quelli doppi. In questo caso non viene fatto il parsing delle varibili presenti nella stringa

  10. #20
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    732
    uso editpad pro, mi dava un colore errato ma non capivo xchè...
    ok corretto grazie adesso non dà errori e tutto il tuo codice è online!!!!
    devo solo collegare la tua ultima query-->
    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"
    ?> 
    con un ECHO che mi stampi il risultato... giusto?

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.